标签:inf 中间 必须 自己 cep strong temp 比较 请求
中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。
但是由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。
中间件可以定义五个方法
process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_exception(self, request, exception)
process_template_response(self,request,response)
process_response(self, request, response)
自己定义一个中间件,需要写一个类,这个类必须继承 MiddlewareMixin
# views.py def index(request): print("views.py(视图函数)") return HttpResponse("ok")
# my_middleware.py from django.utils.deprecation import MiddlewareMixin class Test1Middleware(MiddlewareMixin): def process_request(self, request): print("Test1请求") def process_response(self, request, response): print("Test1返回") return response class Test2Middleware(MiddlewareMixin): def process_request(self, request): print("Test2请求") def process_response(self, request, response): print("Test2返回") return response
结果:
Test1请求
Test2请求
views.py(视图函数)
Test2返回
Test1返回
注意:
如果当请求到达 Test2请求 的时候直接不符合条件返回,即 return HttpResponse("Test2Middleware中断"),程序将把请求直接发给中间件 Test2Middleware 返回,然后依次返回到请求者:
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class Test1Middleware(MiddlewareMixin): ... class Test2Middleware(MiddlewareMixin): def process_request(self, request): print("Test2请求") return HttpResponse("Test2Middleware中断") ...
结果:
Test1请求
Test2请求
Test2返回
Test1返回
该方法有一个参数,就是request。它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将相应对象直接返回给浏览器。
该方法有两个参数,一个是request,一个是response,request就是上述例子中一样的对象,response是视图函数返回的HttpResponse对象。该方法的返回值也必须是HttpResponse对象。
该方法有四个参数;
request HttpRequest对象
view_func Django即将使用的视图函数(它是实际的函数对象,而不是函数的名称作为字符串)
view_args 将传递给视图的位置参数的列表
view_kwargs 将传递给视图的关键字参数的字典;view_args和view_kwargs都不包含第一个视图参数(request)
class Test1Middleware(MiddlewareMixin): def process_request(self, request): print("Test1请求") def process_response(self, request, response): print("Test1返回") return response def process_view(self, request, view_func, view_args, view_kwargs): print("Test1_view") class Test2Middleware(MiddlewareMixin): def process_request(self, request): print("Test2请求") def process_response(self, request, response): print("Test2返回") return response def process_view(self, request, view_func, view_args, view_kwargs): print("Test2_view")
结果:
Test1请求
Test2请求
Test1_view
Test2_view
views.py(视图函数)
Test2返回
Test1返回
该方法两个参数;
request HttpRequest对象
exception 视图函数异常产生的Exception对象
这个方法只有在视图函数中出现异常了才执行,它返回的值可以是一个None也可以是一个HttpResponse对象。如果是HttpResponse对象,Django将调用模板和中间件中的process_response方法,并返回给浏览器,否则将默认处理异常。如果返回一个None,则交给下一个中间件的process_exception方法来处理异常。
标签:inf 中间 必须 自己 cep strong temp 比较 请求
原文地址:https://www.cnblogs.com/believepd/p/9940105.html