1、settings.py没有注释到csrf。当post请求的方式会报错。
接下来就解决问题!
1. django中间件 最多5个
- process_request 请求
- process_view
- process_response 相应
- process_exception 异常
- process_render_template 2. 中间件执行流程:
process_request>路由匹配 找到函数不执行>process_view
>视图函数>process_response 3. 中间件的作用
- 权限
- 用户登录验证 4. django的csrf实现功能:
csrf在process_view方法
- 检查视图是否被@csrf_exempt(免除csrf认证)
- 去请求体或cookie中获取token
1.FBV:情况一:csrf打开,个别不需要csrf认证。在方法的上方加@csrf_exempt 。这是全局使用csrf。
2.FBV:情况二:csrf注释,个别需要csrf认证。加@csrf_protect ,这是局部使用csrf。
1.CBV:情况一:csrf打开,个别不需要csrf认证。@method_decorator 全局使用csrf。
运行结果:加在单独方法上是不行的,还是会报错。
方式一:
方式二:加载class类上,指定方法名。装饰的位置不一样。
总结:
- 本质,基于反射来实现
- 流程:路由,view,dispatch(反射)
- 取消csrf认证(装饰器要加到dispatch方法上且method_decorator装饰) 扩展:
- csrf
- 基于中间件的process_view方法
- 装饰器给单独函数进行设置(认证或无需认证)