今日学习内容
静态文件及相关配置
使用django步骤
- 创建django项目并创建对应关系
- 在urls.py中添加一组对应关系
- 在APP的views.py中编写核心业务代码
- 利用三板斧与前端做交互:
HttpResponse、render、redirect
浏览器资源访问
我们在访问django框架资源的使用之所以可以拿到数据是因为提前在urls.py中开设了相应的资源接口,
如果访问不到资源那么就是没有开设相应的接口。所以我们要判断相应对应关系中资源接口是否存在。
静态文件
html页面上不经常改变的资源
- 第三方框架文件
- css文件
- js文件
- 图片文件
针对静态文件资源一般放置static文件夹里面,统一管理。
当static目录下有很多不同类型是静态文件资源,我们还可以划分更多文件夹,方便管理。
-
others文件夹
存储第三方框架文件
-
css文件夹
所有的css文件
-
js文件夹
所有的js文件
-
imgs文件夹
所有图片文件
静态文件、接口
针对静态文件资源访问也需要开设相应文件接口
'''
注意:每个静态文件资源地址不是固定的,
所以需要在settings.py文件中配置静态文件。
'''
STATIC_URL = '/static/' #接口前缀
# 静态文件资源配置
STATIC_DIRS =[
os.path.join(BASE_DIR, 'static')
]
1.接口前缀:STATIC_URL = '/static/'
就是资源访问的入场券,没这个前缀,任何资源都访问不到,而且接口前缀必须要有,格式必须要对。
2.资源配置里的static 这个表示资源存在的文件路径。
2.1资源配置中以列表类型表示里面可以存放多个数据值,也就是说可存放多个静态文件路径。
2.2静态文件的查找方式至上而下。
3.为了解决接口前缀方便去切换和更改。引入动态解析
动态解析:
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
请求方法
URL是统一资源定位符(网址)
-
GET请求
-
索取资源
-
携带额外数据:
URL? xxx= 参数1 & xx= 参数2...
-
限制:
- 无关紧要非敏感数据
- 大小:2KB-4KB左右
无请求体(Http数据格式)
-
-
POST请求
-
提交资源
-
携带额外数据:
- 可携带敏感数据
- 请求体
- 大小无限制
-
会出现一下403响应码表示访问权限不够。所以要在提交post请求前需去配置文件中注释一行代码
-
form表单默认的数据提交方式是get
method = 'post' action 控制数据的提交地址 方式1:不写,默认当前页面所在的地址提交 方式2:写后缀 /index/ 自动补全ip和port 方式3:写全称 https://www.baidu.com
-
提交post请求前需去配置文件中注释一行代码
MIDDLEWARE = [ # 'django.middleware.csrf.CsrfViewMiddleware', ]
request对象方法
-
request.method
获取请求方式,结果是纯大写的字符串
-
request.POST
获取发送来请求体的普通数据(不包含文件) request.POST.get() 默认只获取列表中最后一个数据值 request.POST.getlist() 获取键对应的整个列表里所有数据值
-
request.GET
获取url后面携带的非敏感数据 request.GET.get() 默认只获取列表中最后一个数据值 request.GET.getlist() 获取键对应的整个列表里所有数据值
def login(request): '''该函数将会通过不同的请求方式触发,并且需要执行不同的业务逻辑代码''' print(request.method) #POST if request.method == 'POST': print(request.POST) #<QueryDict: {'username': ['xz'], 'password': ['123']}> print(request.GET) #<QueryDict: {}> print(request.POST.get('username'), request.POST.get('password')) #xz 123 print(request.POST.getlist('username')) #['xz'] res = request.POST.get('username') print(type(res)) #<class 'str'> return HttpResponse('发送到了!') #print(request.GET.getlist()) return render(request, 'login.html')
pytharm链接MySQL
步骤
-
查找pycharm提供的database按钮
左下角或右侧边栏、下载插件、以上都找不到,那就卸载重新下载。
-
首次链接数据库需要下载对应的驱动
-
简单的增删改查
django链接MySQL
django默认使用的是sqlite3,但是这款数据库一般只用于本地测试,功能少。
-
配置文件中修改配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 指定数据库软件名称 'NAME': 'day55', # 指定库名 'USER': 'root', 'PASSWORD': '123', 'HOST': '127.0.0.1', 'PORT': 3306, 'CHARSET': 'utf8' } }
-
指定链接MySQL的模块
django1.11版本需要在项目或者应用目录下的__init__.py中编写一行代码 import pymysql pymysql.install_as_MySQLdb() django2.2 以上版本需要使用mysqlclient模块 在命令行中下载 pip install mysqlclient
django orm
ORM:对象关系映射
类 映射成 表
对象 映射成 记录
对象点属性 映射成 字段对应的值
'''
ORM的存在可以不会让不会MySQL的python程序员,使用python的语法简单快捷的操作MySQL
'''
-
先去应用目录下
models.py
编写模型类class User1(models.Model): #类似于定义了表名 id = models.AutoField(primary_key=True)#类似于定义主键 name = models.CharField(max_length=32)#类似于定义普通字段 pwd = models.IntegerField() #类似于定义普通字段
-
数据库迁移/同步命令
1.将models中有关数据库的操作记录下来(migrations文件夹) python manage.py makemigrations 2.将操作真正影响到数据库中 python manage.py migrate '''当修改了models中与数据库相关的代码 都必须执行上述的命令''' 3.可以简写也可以指定应用单独迁移/同步 makemigrations app01 migrate app01 注意:创建后的表都是前面有APP名为前缀的,_后面的表名 orm创建外键也会在后面加_id后缀。所以书写外键的时候可以不用加后缀。
-
表的主键在
orm
中可以不写orm
会自动帮你添加一个id的主键如果你需要主键的名称不是
id字段
就只能自己去创建。
orm语法
1.查
models.User.objects.filter() 结果可以看成是一个列表嵌套数据对象
如何获取对象,可以使用first()方法,如果没有值会返回None,我们用if判断。
也能用索引,但是对于不存在的对象会报错,所以我们这里不用索引。
2.增
models.User.objects.create(name='wyb',pwd='123')
3.改
models.User.objects.filter(id=1).update(name='xz')
4.删
models.User.objects.filter(id=4).delete()
注意:浏览器按键发送请求,后端view.py就执行代码,然后数据库就改变。
orm外键关联
MySQL
一对多
外键字段建在多的一方
多对多
外键字段建在第三张关系表
一对一
外键字段建在查询频率较高的表中
ORM
一对多
外键字段建在多的一方
publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
多对多
外键字段可以直接写在某张表中
orm会自动帮你创建第三张表
authors = models.ManyToManyField(to='Authors')
一对一
外键字段建在查询频率较高的表中
detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
标签:文件,python,py,request,外键,学习,models,Day51,POST
From: https://www.cnblogs.com/bjyxxc/p/16644663.html