标签:自带 钩子 默认 mixin except learn 名称 框架 包含
官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。
django中自带7个中间件,每个中间件发挥自己的一些作用,中间件的执行顺序是按照settings中由上到下,每一层都相当于是一个过滤器.
前提:使用自定义中间件要在settings中注册
from django.utils.deprecation import MiddlewareMixin
class MyMiddleWare(MiddlewareMixin):
def process_request(self,request):
pass
自定义的中间键支持5个自定义方法
该方法会在视图函数调用之前执行.
request是HttpRequest对象。
view_func是Django即将使用的视图函数。 (它是实际的函数对象,而不是函数的名称作为字符串。)
view_args是将传递给视图的位置参数的列表.
view_kwargs是将传递给视图的关键字参数的字典。 view_args和view_kwargs都不包含第一个视图参数(request)。
它应该返回None或一个HttpResponse对象。 如果返回None,Django将继续处理这个请求,执行任何其他中间件的process_view方法,然后在执行相应的视图。 如果它返回一个HttpResponse对象,那么将不会执行Django的视图函数,而是直接在中间件中掉头,倒叙执行一个个process_response方法,最后返回给浏览器
按照MIDDLEWARE中顺序自上而下执行
一旦process_request中返回了HttpResponse对象,就将前面的process_request所对应的process_response出栈返回.这时,还没有一个视图函数被执行,直接在中间件层就完成了返回.
橙色为主要执行流程
绿色为同步执行,中间件返回数据会同步发送给缓存
蓝色为当中间件中process_request返回Httpresponse时执行
蓝色:请求发到服务端,会去缓存中查找数据,查到直接返回,没查到继续向下走
标签:自带 钩子 默认 mixin except learn 名称 框架 包含
原文地址:https://www.cnblogs.com/agsol/p/11985744.html