知识点概要
- Session
- CSRF
- Model操作
- Form验证(ModelForm)
- 中间件
- 缓存
- 信号
一、 Session
基于Cookie做用户验证时:敏感信息不适合放在cookie中
a. Session原理
Cookie是保存在用户浏览器端的键值对
Session是保存在服务器端的键值对
b. Cookie和Session对比
c. Session配置(缺少cache)
d. 示例:实现两周自动登陆
- request.session.set_expiry(60*60*24*14)
- SESSION_SAVE_EVERY_REQUEST = True
PS: cookie中不设置超时时间,则表示关闭浏览器自动清除
- session依赖于cookie
- 服务器session
request.session.get()
request.session[x] = x
request.session.clear()
- 配置文件中设置默认操作(通用配置):
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
# set_cookie('k',123)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
- 引擎的配置
二、 CSRF
a. CSRF原理
b. 无CSRF时存在隐患
c. Form提交(CSRF)
d. Ajax提交(CSRF)
CSRF请求头 X-CSRFToken
三、 Model操作
a. 字段类型 + 参数
b. 连表字段 + 参数
c. Meta
d. SQL操作:
- 基本增删改查
- 进阶操作
- 正反查询
- 其他操作
e. 验证(弱)
四、 Form操作
完成:
- 验证用户请求
- 生成HTML
(保留上一次提交的数据)
自定义:
- 类
- 字段(校验)
- 插件(生成HTML)
初始化操作:
五、中间件
1、中间件创建
(1)创建一目录Middle下创建一py文件
(2)配置文件中添加中间件
2、中间件生命周期
(1)正常流程
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class Row1(MiddlewareMixin): def process_request(self,request): print('第一层第一列') #注意下面的request和response的顺序 def process_response(self, request,response): print('第一层第二列') return response class Row2(MiddlewareMixin): def process_request(self,request): print('第二层第一列') #如果到这里请求直接返回的话,10版的会直接从同一层response返回 #10版以前的会到最后一个中间键开始返回response # return HttpResponse('请求截胡') def process_response(self, request, response): print('第二层第二列') return response class Row3(MiddlewareMixin): def process_request(self,request): print('第三层第一列') def process_response(self, request, response): print('第三层第二列') return response
效果图
(2)提前截胡,在同一层的request直接响应请求,不会往下一层走了
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class Row1(MiddlewareMixin): def process_request(self,request): print('第一层第一列') #注意下面的request和response的顺序 def process_response(self, request,response): print('第一层第二列') return response class Row2(MiddlewareMixin): def process_request(self,request): print('第二层第一列') #如果到这里请求直接返回的话,10版的会直接从同一层response返回 #10版以前的会到最后一个中间键开始返回response return HttpResponse('请求截胡') def process_response(self, request, response): print('第二层第二列') return response class Row3(MiddlewareMixin): def process_request(self,request): print('第三层第一列') def process_response(self, request, response): print('第三层第二列') return response
效果图
总结:
也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。
六、 缓存
5种配置
3种应用:
全局
视图函数
模板
七、 信号
- 内置信号
- 自定义
- 定义信号
- 出发信号
- 信号中注册函数