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

60 中间件

时间:2019-01-10 18:24:15      阅读:188      评论:0      收藏:0      [点我收藏+]

标签: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函数,直接返回给用户结果

技术分享图片

 

 

 


 

60 中间件

标签:ica   cli   llb   ...   none   导入   项目   ons   作用   

原文地址:https://www.cnblogs.com/knighterrant/p/10251393.html

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