先走一遍django
内容概要
- 静态文件
- request对象方法
- pycharm连接MySQL
- django连接MySQL
- django模型层初始
- 基本ORM操作
静态文件
-
编写一个有用户登录页面
-
静态文件
不怎么经常变化的文件 主要针对html文件所使用到的各种资源
比如:css文件、js文件、img文件、第三方框架文件
django针对静态文件资源需要单独开设一个目录统一存放
static目录
该目录下如果有各种类型的文件都多 还可以继续创建目录
css目录
js目录
img目录
utils目录/plugins目录/libs目录/others目录/或者不创建目录 就放在static 根目录下

-
资源访问
我们在地址栏之所以可以属于路由获取到相应的资源是因为程序员提前开设好了资源的接口

-
静态文件资源访问
默认情况下无法访问 因为我们没有提前开设静态文件资源的访问接口

可以看到下面三个全是404 请求资源访问不到
但是我可以在本地直接打开,不在浏览器上走路由去访问

可以看到两个的url都不一样。
静态文件配置
我们是怎么可以写路由访问资源的 是在路由层写路由与视图函数的对应关系才可以访问,不写回报404错误
所以如果我们要想让html这些静态文件能够被访问我们得在路由层写对应关系。但是我们的静态文件要是特别多怎们办项目没开始写 这些配置都够让我们喝一壶的了所以 django说你别配置了你在我的setting文件写两句代码就可以了

总体是 如果路由上有 /static/那么它后面的路径就在我下面的这目录里面找 如果找不到就报错

现在我们跑一下就可以了

还是同样的加了两行代码就可以了
这里还有一个小点 就是我可以不可以改这个前缀


我的前缀一改 ,我的html文件就不能访问到了,这个前缀一改我的html文件里面的配置也得改


有的试的可能你不改也可以访问,那可能是你之前访问成功过,浏览器自动帮你加载到浏览器内存里面了。这里就需要


这就是如果你打开了 开发者调试工具(就是浏览器的检查或f12)那么他就不去加载浏览器缓存了。
现在又出现了一个问题,如果你的之前的写的配置文件的前缀都写好了,如果你的上级让你改前缀,怎么办,配置文件特别多一个个的改那得改到啥时候,能不能动态加载
可以
接口前缀动态匹配

我现在在改前缀


现在不管你怎么改都可以了
form表单

"""
action 控制提交的地址
当你点提交的时候回去访问这个 你后面写的地址
1.action='' 什么也不写数据默认提交给当前页面
2.action='https://www.baidu.com' 朝百度提交但是人家不一定收
3.action='/index/' 朝当前的服务端index地址提交
method 控制数据的提交方式
什么也不写 默认是 get
可以改成post
"""

写的数据都在地址后面 ?后以name=value的形式以&隔开
问号后面的携带数据的大小限制(2KB)的并且不能携带敏感数据
这就是get的请求方式 是向服务端要数据

我改成了post post 是向服务器提交数据

他会报这个错误
403是没有权限 所以我们需要去配置文件


这样就没事了
你可以看到我虽然提交了地址上啥也没又出现,它会把这些数据封装到请求头里面发送给服务端。
请求体携带数据安全性较高并且灭有大小限制
一般敏感数据都会用post 。比如账号密码
request对象
request.method 可以看到请求方式


有了这个数据我们就可以针对不同的请求方式做一些不同的方法
比如 如果是get 我就返回页面 如果是post我就返回一个其他页面
def login_func(request):
# 注意 request.method 返回的是大写字符串
if request.method == 'POST':
return HttpResponse(b'is POST')
return render(request, 'llg.html')



我点提交 就直接返回一个 is POST
-
获取客户端发送的数据
request.POST 获取post请求 请求体里面的携带的数据

可以看到像字典的数据返回回来了
request.POST.get('name') 获取列表最后一个数据

request.POST.getlist('name') 获取列表

request.GET 获取网址后面携带的数据

request.GET.get('name') 获取列表的最后一个数据

request.GET.getlist('name') 获取列表

pycharm连接数据库
- 初次连接数据库 需要下载对应的驱动

点击左上角或者







不行的话就切换一下驱动


都可换着试试多换几个都可以了

然后一路点点就行了
django连接数据库
django自带sqlit3是一个小型的数据库 功能比较少 主要用于测试
我们的实际项目中会替换掉它
默认配置sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
-
修改后的配置文件
'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db3', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '123', 'CHARSET': 'utf8' } -
需要指定模块
django1.X版本需要在项目目录下或者app目录下的
__init__.py编写代码import pymysql pymysql.install_as_MySQLdb()django2.X及以上都可直接通过下载
mysqlclient模块解决pip install mysqlclientps:该模块windows下载问题不大 主要是mac电脑可能又问题
ORM简介
ORM:对象关系映射
能够让不会SQL语句的python程序员 使用python面型对象的语法来操作数据库
类 表
对象 一条条数据
对象点名字 数据获取字段对应的值
ORM由于高度封装了SQL 所以有时候效率较低 我们需要自己写SQL
ORM基本操作
-
先在
models.py中编写模型类# create table book( class Book(models.Model): # id int primary key auto_increment id = models.AutoField(primary_key=True) # name varchar(32) name = models.CharField(max_length=32) # price int price = models.IntegerField() -
执行数据库迁移(同步)相关命令
python mange.py makemigrations将操作记录到小本本上(migrations)
python manage.py migrate将操作同步到数据库上
"""
注意每次在models.py 修改与数据库相关的代码 都需要再次执行上述命令
"""



第一条命令是在小本本(makemigrations)记录

第二条命令是同步数据库

ORM基本语句
- 添加
from app01 inport models
# 添加
models.类名.objects.create()


- 查询
models.类名.objects.filter()


返回的是列表,列表里面是对象
- 修改
models.类名.objects.update()


-
删除
models.类名.objects.delete()

直接写会把库里面的数据直接全部删除掉
写删除也不会提示 因为一般是不会删除数据的,只是改数据的某个字段就好了

浙公网安备 33010602011771号