day22-django 中间件

一、引子

  最开始我们学习django 注释掉 csrf ,  上一回中我们学习了 csrf , 我们大概知道了,客户端请求,到vews 函数 ,需要通过中间件验证。

今天我们就来,学习一下这个非常重要的东西,我们大概的知道,一个请求过程,如下图,图很丑,不要在意这些。。。

  

  在其他框架,语言中都有类似的东西,有些叫管道。。。

二、中间件

  先随便看看源码,了解一下中间件的本质

  

  安装 ctrl ,点击   CsrfViewMiddleware

   

  本质似乎是这么个,请求--中间处理--返回 。

下面我们试着自定义中间件,验证一下

三、自定义中间件

  3.1.创建 

    3.1.1  新建 Middle, --新建 m1 --导入 父类--创建中间件类,及方法  

      

 

  3.2.导入

     

  3.2.3 验证

    views ,urls 

    

    

    在浏览器中请求一下 test

    

    

    上面这个情况 是在 ,都符合验证的情况,完整的流程,

那如果中间某个中间件,不符合验证条件呢,马上被踢回去,请看下面的表演。。。

  

    

 上面讲了 process_request ,process_response  这里还有一个 process_view  ,process_exceptionprocess_template_response

  下面我们在着重介绍一下 process_view, 其它两个比较不常用,稍微介绍一下。

  

 1 __author__ = 'keven'
 2 
 3 from django.utils.deprecation import MiddlewareMixin
 4 from django.shortcuts import HttpResponse
 5 
 6 class Row1(MiddlewareMixin):
 7     def process_request(self,request):
 8         print("row1")
 9     def process_response(self,request,response):
10         print("row")
11         return response
12 class Row2(MiddlewareMixin):
13     def process_request(self,request):
14         print("row2")
15         # #加载这里有验证,if...else
16         # return HttpResponse("get out")
17     def process_view(self,request,callback,callback_args,callback_kwargs):
18         print("view")
19         
20     def process_response(self,request,response):
21         print("row1")
22         return response
23 class Row3(MiddlewareMixin):
24     def process_request(self,request):
25         print("row3")
26     def process_response(self,request,response):
27         print("row2")
28         return response
#############输出
#
  

Quit the server with CTRL-BREAK.
row1
row2
row3
view
fuck python
row2
row1
row
[24/Jul/2018 08:56:49] "GET /test/ HTTP/1.1" 200 6
Performing system checks...

 可以得出结论,流程图。

  

 

 

3.2、process_exception

说明:如果view函数报错了,这个东西才会执行,否则不会执行。

1
2
def process_exception(self,request,exception):
        print('ex')

 这个东西不经常用,所以暂时咋不说,知道就行了。

如图:

 

3.3、process_template_response

说明:如果view函数返回的对象中,具有render方法,这个函数才会执行,这个东西也用不到,知道就行。

1
2
3
def process_template_response(self,request,response):
     print("----------")
     return response #继续请求下去,就要把返回值返回了

 如图:

 

四、总结

  1. 中间件的作用:判断一下,客户端发来的请求有没有带那个请求头,如果带那个请求头,它说你不要再继续往下走了,在我这边就直接终止掉了,这个适合所有请求统一操作,公共校验,黑名单过滤就在中间件这边过滤了。
  2. 定义中间件的类必须继承MiddlewareMixin,并且需要在setting.py文件中导入,导入的时候到类级别即可。
  3. 定义的类,需要重写process_request、process_view和process_response方法,因为这三个是经常用到的,另外两个不经常用到。

 

posted @ 2018-07-24 09:16  东郭仔  阅读(104)  评论(0)    收藏  举报