码迷,mamicode.com
首页 > 其他好文 > 详细

Django之中间件

时间:2018-03-06 23:23:34      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:header   func   通过   返回   自定义   列表   middle   项目   bubuko   

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里加上自己写的类的路径:

技术分享图片

Django之中间件

标签:header   func   通过   返回   自定义   列表   middle   项目   bubuko   

原文地址:https://www.cnblogs.com/value-code/p/8516930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!