标签:ica cli llb ... none 导入 项目 ons 作用
1.介于request与response处理之间的一道处理过程,并且在全局上改变django的输入与输出。
2.修改请求。例如被传送到view中的HttpRequest对象。 或者想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
3. 在view执行之前做一些操作,可以用 middleware来实现。
Django默认的Middleware
:
MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware‘, ‘django.contrib.sessions.middleware.SessionMiddleware‘, ‘django.middleware.common.CommonMiddleware‘, ‘django.middleware.csrf.CsrfViewMiddleware‘, ‘django.contrib.auth.middleware.AuthenticationMiddleware‘, ‘django.contrib.messages.middleware.MessageMiddleware‘, ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘, ]
process_request process_response
process_view
process_exception
先理解django项目运行流程
django项目
1.wsgiref模块(socket)
报文data--->envision--->request对象
2.中间键,第一层处理业务的流程
3.控制器(路由+视图)
4.models模型层,模板层
5.视图处理后把数据返回给中间件,中间件再将数据返回给客户端
大致的流程如下图:
自定义中间件
注意 :自定的中间件必须继承 MiddlewareMixin 导入from
django.utils.deprecation
import
MiddlewareMixin
1.在app 中创建Mymiddlewares.py 的自定义文件
2. 在该文件中导入
from
django.utils.deprecation
import
MiddlewareMixin
3.在Mymiddleware.py 中创建中间件
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse #中间件1 class M1(MiddlewareMixin): def process_request(self,request): print("M1 process_request... ") # 返回None即走下一个中间件 # return HttpResponse("禁止访问!") def process_response(self,request,response): print("M1 response....") return response def process_view(self, request, callback, callback_args, callback_kwargs): print("Md1 view") #return HttpResponse("123") # obj=callback(callback_args) # index(request) # return obj def process_exception(self, request, exception): print("md1 process_exception...") return HttpResponse("error") class M2(MiddlewareMixin): def process_request(self,request): print("M2 process_request... ") def process_response(self, request, response): print("M2 response....") return response def process_view(self, request, callback, callback_args, callback_kwargs): print("Md2 view") def process_exception(self, request, exception): print("m2 exception",exception) print("md2 process_exception...") #return HttpResponse(exception)
4.在settings 中添加中间件配置 格式 :” app1.middlewares.中间件名字(类名)”
MIDDLEWARE = [ ‘django.middleware.security.SecurityMiddleware‘, ‘django.contrib.sessions.middleware.SessionMiddleware‘, ‘django.middleware.common.CommonMiddleware‘, ‘django.middleware.csrf.CsrfViewMiddleware‘, ‘django.contrib.auth.middleware.AuthenticationMiddleware‘, ‘django.contrib.messages.middleware.MessageMiddleware‘, ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘, ‘app1.middlewares.M1‘, ‘app1.middlewares.M2‘, ]
中间件的工作流程图:
1.如果中间件1中的process_request ,开始就return 结果,那么就不会走中间件2以及视图函数,直接走中间件1的request.response函数,直接返回给用户结果
标签:ica cli llb ... none 导入 项目 ons 作用
原文地址:https://www.cnblogs.com/knighterrant/p/10251393.html