首页 > 其他 > 详细

Django 中间件

时间:2019-08-17 16:43:50      阅读:70      评论:0      收藏:0      [点我收藏+]

中间件。

  详细介绍看:https://www.cnblogs.com/liwenzhou/p/8761803.html

准备工作:

  1:创建一个.py文件。如:my_middle.py

  2:在创建的py文件里面写自定义的中间件。如:M1,M2

  3::在setting.py里的MIDDLEWARE里加上自定的中间件。如:‘my_middle.M1’,‘my_middle.M2’,

中间件的运行顺序:

创建M1,M2两个中间件。

在settings里注册顺序:

  ‘my_middle.M1‘,

  ‘my_middle.M2‘,

 1 from django.utils.deprecation import MiddlewareMixin
 2 
 3 class M1(MiddlewareMixin):
 4     def process_request(self,request):
 5         print(m1的process_request)
 6     def process_response(self,request,response):
 7         print(m1的process_response)
 8         return response
 9     def process_view(self,request,callback,callback_arg,callback_kwargs):
10         print(callback)
11         print(m1的process_view)
12 class M2(MiddlewareMixin):
13     def process_request(self,request):
14         print(m2的process_request)
15     def process_response(self,request,response):
16         print(m2的process_response)
17         return response
18     def process_view(self,request,callback,callback_arg,callback_kwargs):
19         print(callback)
20         print(m2的process_view)

运行结果:

  m1的process_request

  m2的process_request
  <function middle_test at 0x0000000003F86620>
  m1的process_view
  <function middle_test at 0x0000000003F86620>
  m2的process_view
  视图函数
  m2的process_response
  m1的process_response

其过程如图所示:

    技术分享图片

说明:

  process_request的返回值有两个:None和HttpResponse。如果返回值是None则按原来的顺序进行执行,入如果是HttpResponse则不会执行后面的中间件中的process_request,和process_view。直接从该中间件的process_response执行。并将返回值返回给用户。

  process_response只能返回HttpResponse对象,这里返回的是response。

  process_view有4个参数

      request:请求相关的内容。

      callback:是Django即将使用的视图函数。 (它是实际的函数对象,而不是函数的名称作为字符串。)

      callback_args是将传递给视图的位置参数的列表.

      callback_kwargs是将传递给视图的关键字参数的字典。 callback_args和callback_kwargs都不包含第一个视图参数(request)。

      ps:后面三个参数callback这个名字是可以改变的。

  process_view有2个返回值None和HttpResponse。当返回值是None时,按原来的顺序执行不做改变。入如果是HttpResponse,则不会执行后面的中间件的process_view,直接执行process_response(不是从当前中间件的process_response执行,是从第一个执行)。

  process_exception(self,request,exception):是在执行试图函数之后process_response之前执行。在视图函数没有异常时不执行。视图函数有异常时才执行。执行的顺序是按照注册的顺序的倒序执行。有2个返回值None和HttpResponse。当返回值是None时,按原来的顺序执行不做改变。入如果是HttpResponse,如:

return HttpResponse(str(exception)),不会执行下面的process_exception,直接执行process_response。并将返回值返回给浏览器。

 

技术分享图片

Django 中间件

原文:https://www.cnblogs.com/gwwj/p/11368986.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!