djnago中间件
前言
在form表单中当我们提交表单时会有这样的错误>>>>请求post时候的会出现403 forbidden,那我们就说说这个类中间件,(csrf只是中间件的一种)
以前我们说用户请求来了,先到urls匹配对应的视图函数,视图函数拿到模板和数据库的数据返回给用户,其实不是怎样的,中间
还经过了中间件,那先下面我们来做一下。
请求的流程
注: 看图,就是说用户发来请求其实是先经过每一个中间件,>> 到URL >>> 匹配对应的视图函数 >> 视图函数拿到模板和数据库的数据 .>>> 返回给中间件 >>>> 返回给用户
自定义中间件
第一 ,在工程目录下创建一个新目录,新目录里面创建.py文件,在py文件中写类,这个继承中间件的类,如图
第二,写你指定义的类需要干什么事。这里只是显示打印出一个请求过程的流程,
第三,在setting中在找到 MIDDLEWARE
看下结果: 注:这个就是我们上面说的。那个流程。。
注:
在类里面定义的函数是有要求的
函数名不能变,就是这样定义的
def process_requset(self,request): (这个有两种情况一种是正常请求没有返回值,不正常请求就有返回值。它可以有return 值)
pass
def process_response(self,request)
pass 不正常返回时,如图,
中间件的补充
其实中间件有这个几个函数(常用就三个)
process_request(
self
,request)
process_view(
self
, request, callback, callback_args, callback_kwargs)
process_template_response(
self
,request,response)
process_exception(
self
, request, exception)
process_response(
self
, request, response)
执行顺序:
下面说下view的函数参数:
def
process_view(
self
, request, view_func, view_func_args, view_func_kwargs):
#view_func 指的是view函数
#view_func_args:当url的参数里面不是name定义的,就直接是'test/(\d+)'定义的,用这个接收
#view_func_kwargs ,当url里面是name定义的,是'test/(?P<nid>\d+)'定义的,用这个接收
有view的执行顺序:
说下不常用的函数
说明:如果view函数报错了,这个东西才会执行,否则不会执行。
def
process_exception(
self
,request,exception):
print
(
'ex'
)
错误处理:
还有一个不常用的函数:
说明:如果view函数返回的对象中,具有render方法,这个函数才会执行,这个东西也用不到,知道就行。
def
process_template_response(
self
,request,response):
print
(
"----------"
)
return
response
#继续请求下去,就要把返回值返回了
在类中定义:
输出的结果:
总结
- 中间件的作用:判断一下,客户端发来的请求有没有带那个请求头,如果带那个请求头,它说你不要再继续往下走了,在我这边就直接终止掉了,这个适合所有请求统一操作,公共校验,黑名单过滤就在中间件这边过滤了。
- 定义中间件的类必须继承MiddlewareMixin,并且需要在setting.py文件中导入,导入的时候到类级别即可。
- 定义的类,需要重写process_request、process_view和process_response方法,因为这三个是经常用到的,另外两个不经常用到。
最新文章
- Android MVP 设计模式
- Error: java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path
- PHP获取汉字的转化为拼音字母实现程序
- django: template variable
- 微软已于10月底停止销售预装Windows 7/8.1的电脑
- javascript this指针指向?
- phpstorm显示行号
- Tomcat在Linux服务器上的BIO、NIO、APR模式设置
- npm Error: Cannot find module &#39;./auth.js&#39;
- Alpha冲刺! Day5 - 砍柴
- python 爬虫基础知识一
- (转)查询或修改iPhone的短信服务中心号码(iOS通用)
- JVM总结-垃圾回收(下)
- 39.纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效
- JDK 1.5、1.6 &; 中文版API,J2EE5API大全(借鉴)
- 网页设计师必知的10则SEO
- PAT 甲级 1043 Is It a Binary Search Tree
- python(十二):网络编程之ISO/OSI模型
- 一个java多线程面试题
- MMU解读
热门文章
- 类型TTreeView.items.add 与 TTreeView.items.addchild有何区别?(10分)
- 提取站长之家IP批量查询
- 微信小程序 左右分类滚动列表
- webdriervAPI(CSS定位元素)
- 三角箭头 css实现
- js延迟2秒执行事件
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
- luogu P1115 最大子段和 (dp)
- MySQL添加、修改、撤销用户数据库操作权限的一些记录
- React Native 中 component 生命周期