知识点概要
- 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)正常流程
View Code
- 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 直接响应请求,不会往下一层走了
View Code
- 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 种应用:
全局
视图函数
模板
七、 信号
- 内置信号
- 自定义
- 定义信号
- 出发信号
- 信号中注册函数
来源: