Django之中间件

1、中间件流程

  当启动django程序并发送一个请求后,首先通过WSGI,然后走一遍settings.py中设置的MIDDLEWARE,即中间件:

2、中间件的五个方法:

  1) process_request(request):

    - request是一个HttpRequest对象

    - 在Django决定执行哪个视图之前,process_request()会在每个请求上调用。

  2)process_view(request, view_func, view_args, view_kwargs):

    - request:一个HttpRequest对象

    - view_func :Django会调用的一个Python函数

    - view_args:会被传递到视图的位置参数列表

    - view_kwargs:会被传递到视图的关键字参数字典

    - process_view()会在Django 调用视图之前被调用。它将返回None 或一个Httpresponse对象。如果返回None,Django 将会继续处理这个请求,执行其它的process_view() 中间件,然后调用对应的视图。如果返回一个Httpresponse对象,Django 就不用再去调用其它的view 或exception 中间件,或对应的视图.

  3)process_exception(request, exception):

    - request:一个HttpRequest对象

    - exception:一个被视图中的方法抛出来的 Exception对象

    - 如果当一个视图抛出异常时,Django会调用process_exception()来处理,而不会执行process_response。process_exception()应该返回一个None 或者一个Httpresponse对象。如果它返回一个Httpresponse对象,模型响应和响应中间件会被应用,响应结果会返回给浏览器。否则, 默认的异常处理机制将会被触发。

  4)process_template_response(request, response):

    - request:一个HttpRequest对象

    - response:一个TemplateResponse对象(或等价的对象),由Django视图或者中间件返回。

    - 如果响应的实例有render()方法,这时候process_template_response()在视图刚好执行完毕之后会被调用。

  5)process_response(request, response):

    - request:一个HttpRequest对象

    - response:Django视图或者中间件返回的HttpResponse或者StreamingHttpResponse对象。

    - 该方法会在所有响应返回浏览器之前被调用,这个方法必须返回Httpresponse或者StreamingHttpResponse对象。它可以改变已有的response,或者创建并返回新的HttpResponse或StreamingHttpResponse对象。

  注意:最后在响应阶段中,中间件以相反的顺序被应用,即在MIDDLEWARE中,最底下的类会最先被运行。

3、自定义中间件

  1)在项目下新建一个文件夹:Middle,在里面建立一个MyMiddle.py文件,写下:

# django1.10 以后的版本需要导入并继承该模块
from django.utils.deprecation import MiddlewareMixin

# 创建一个类,并定义process_request和process_response两个方法
# 其它三个方法可以看情况自行定义
class Row(MiddlewareMixin):
    def process_request(self, request):
        print('处理请求')

    def process_response(self, request, response):
        print('处理响应')
        return response

 

  2)在settings.py中的MIDDLEWARE里加上自己写的类的路径:

posted @ 2018-03-06 21:37  世界辣么大  阅读(160)  评论(0编辑  收藏  举报