zoukankan      html  css  js  c++  java
  • day74天中间件介绍

    一、 importlib

     

     

    settings

     

    执行结果:

    两个process_request 

     

     

     

    process_response按照注册顺序的倒叙进行执行

     PROCESS_VIEW 

    Process_view 在找到url之后 ,视图函数之前执行。

     

    ==================================================================

    一、中间件  

    官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。

    WSGI协议

    首先弄清下面几个概念:
    WSGI:全称是Web Server Gateway InterfaceWSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。serverapplication的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django



    作者:rainybowe
    链接:https://www.jianshu.com/p/679dee0a4193
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    知道中间件作用在哪个位置上: 在wsgi 和 url视图的逻辑中间的位置。

    中间件的定义: 

    wsgi之后 urls.py 之前 在全局操作Django请求和相应的模块

    # 中间件 7个中间件
    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',

     

     

    中间件的使用 :

     有5个固定的方法 :

    process_request 

    process_response 

    上面两个最常用.

    process-view

     process_exception 

    process_template

    用反射的方法 importlib的用法

     

    OO.py 文件

    NAME ='小黑' class Person(object): def __init__(self,name): self.name =name def dream(self): print('{}在做美梦'.format(self.name))

      

    import importlib
    o =importlib.import_module('xx.oo')
    print(o.NAME)
    p =o.Person('赵导')
    p.dream()

    输出的结果

     
     
     
     注意: import-module只能导入包 不能导入类,方法
     
     

    输出结果:

    中间件的执行顺序 

    一、process_request

    settings里的middleware配置文件

        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'my_middleware.OOXX',
        'my_middleware.MD2',
    ]

    my_middleware.py 配置文件的配置

    """
    自定义中间件
    """
    from django.utils.deprecation import MiddlewareMixin
    
    class OOXX(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第一个中间件.')
    
    class MD2(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第二个中间件:MD2 ')
    

    url配置文件

    from django.conf.urls import url
    from django.contrib import admin
    from  app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/$',views.index),
    ]
    

    views

    def index(request):
        print('这是app01 里面的index视图函数')
        return HttpResponse('O98K')

    输出结果

    拿路径

    定义白名单 

    中间件py文件:

    #d定义一个白名单
    URL =['/index/','/xx/','/haha/']
    class OOXX(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第一个中间件.')
            print(request.path_info)#属性
            print(request.get_full_path())#方法
            if request.path_info in URL:
                return
            else:
                return HttpResponse('不OJBK ')
    
    class MD2(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第二个中间件:MD2 ')
    

      

    views视图

    def index(request):
        print('这是app01 里面的index视图函数')
        return HttpResponse('O98K')
    

      

    urls

    from django.conf.urls import url
    from django.contrib import admin
    from  app01 import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/$',views.index),
    ]

    二、 Process_response:

    它有两个参数,一个是request,一个是response,request就是上述例子中一样的对象,response是视图函数返回的HttpResponse对象。该方法的返回值也必须是HttpResponse对象。

     中间件文件

    #d定义一个白名单
    URL =['/index/','/xx/','/haha/']
    class OOXX(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第一个中间件.')
            print(request.path_info)#属性
            print(request.get_full_path())#方法
            if request.path_info in URL:
                return
            else:
                return HttpResponse('不OJBK ')
    
    
    
        def process_response(self,request,response):
            """
             :param request: 是浏览器发来的请求对象
            :param response: 是视图函数返回的响应对象
            :return:
            """
            print('这是ooxx中间件里的process_response')
            return response
    
    class MD2(MiddlewareMixin):
        def process_request(self,request):
            print('这是我的第二个中间件:MD2 ')
    
        def process_response(self,request,response):
            print('这是md2中间件里的process-response')
            return response
    

      

     view

    def index(request):
        print('这是app01 里面的index视图函数')
        return HttpResponse('O98K')
    

     

     

    执行response方法是按照注册顺序(从上到下)的倒叙进行执行

     

     三、Process-view方法

     
  • 相关阅读:
    jQuery 元素操作
    jQuery 文本属性值
    jQuery 属性操作
    jQuery 效果
    sass入门学习篇(二)
    sass入门学习篇(一)
    CSS3 基础知识[转载minsong的博客]
    js倒计时,秒倒计时,天倒计时
    webstorm快捷键收集【转发】
    placeholder各种浏览器兼容问题
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9077744.html
Copyright © 2011-2022 走看看