zoukankan      html  css  js  c++  java
  • day062 中间件

    中间件: 

      作用: 介于request和response之间的一到处理过程,相对比较轻量级,并且在全局上改变django的输入与输出,因为改变的是全局,所以需要谨慎使用,用不好会影响到性能.

    当用户发送请求的时候会依次经过所有的中间件,这是红请求时process_request,最后到达views函数中,views函数处理后,会依次穿过中间件,这个时候是process_response,最后返回给请求者.

    中间件的位置在settings配置,MIDDLEWARE中, 按照从上往下的顺序执行:

    自定义中间件:

    上图的中间件是django自带的中间件,我们也可以自定义中间件,即写一个类,但是这个类必须继承MiddlewareMixin.

    此时还要在settings中的MIDDLEWARE中,最下面加上你自定义的中间件:

      ''middlewares.MD1'' ,  

      ''middlewares.MD2'' , 这里的MD1和MD2是你写的类名

    自定义中间件实例

       目录: 在项目中创建一个包(文件夹),随便起名字,一般我们都起名叫utils包里面,表示一个公共组件,创建一个py文件,随便起名,例如我们起名叫middlewares.py .

    from django.utils.deprecation import MiddlewareMixin
    
    class mdware(MiddlewareMixin):
      #自定义中间件,不是必须要有下面这两个方法,有request方法说明请求来了要处理,有response方法说明响应出去需要处理,不是非要写这两个方法,如果没写process_response,那么会一层一层
    的往上找,那个中间件有process_response方法就返回对象给哪个中间件 def process_request(self,request): print('md1中的 process_request') def process_response(self,request,response): print('md2中的 process_response')
         return response
         #此时必须要return response, 这里类比于跑接力的接力棒

      process_request

      process_request有一个参数,就是request,这个request和视图函数中的request是一样的,如果没有返回值,就按照正常流程走,如果返回了一个Httpresponse,django将不会执行视图函数,而将对应的Httpresponse对象返回给浏览器.

    from django.utils.deprecation import MiddlewareMixin
    
    class md1(MiddlewareMixin):
        def process_request(self,request):
            print(" md1中的process_request")
            
    
    class md2(MiddlewareMixin):
        def process_request(self,request):
            print("md2中的process_request ")

      process_response

      process_response有两个参数,一个是request,另一个是response , request和之前是一样的,response是视图函数返回的Httpresponse对象,该方法的返回值也必须是Httpresponse对象.

    from django.utils.deprecation import MiddlewareMixin
    
    class MD1(MiddlewareMixin):
        def process_request(self,request):
            print('MD1中的process_request')
    
        def process_response(self,request,response): #request和response两个参数必须有
            print('MD1中的process_response')
            return Httpresponse('ojbk')
    
    class MD2(MiddlewareMixin):
        def process_request(self,request):
            print('MD2中的process_request')
    
        def process_response(self,request,response):
            print('MD1中的process_response')
            return response  #必须返回response,不然上层中间件没有拿到HTTPresponse对象,会报错
    

      

  • 相关阅读:
    Core Expression
    Linux基础
    express
    C#程序模拟登录批量获取各种邮件内容信息
    Windows Phone 执行模型概述
    Wp8—LongListSelector控件使用
    网页背景图片自然缩放
    Unix sed实用教程系列目录[已完成]
    Unix sed实用教程开篇
    《SpringMVC从入门到放肆》十五、SpringMVC之上传文件
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10496702.html
Copyright © 2011-2022 走看看