zoukankan      html  css  js  c++  java
  • 所谓拦截器或decorator的简单理解

    A middleware factory is a callable that takes a get_response callable and returns a middleware. A middleware is a callable that takes a request and returns a response, just like a view.

    A middleware can be written as a function that looks like this:

    def simple_middleware(get_response):
        # One-time configuration and initialization.
    
        def middleware(request):
            # Code to be executed for each request before
            # the view (and later middleware) are called.
    
            response = get_response(request)
    
            # Code to be executed for each request/response after
            # the view is called.
    
            return response
    
        return middleware

    关键:

    (1)decorator接收的参数,是一个callable函数,我们称为参数函数

         其实,次参数函数,也是被decorator修饰的对象。  

      (2) decorator内部再定义一个函数,调用参数函数

    换句话说,decorator谁,就把谁纳入自己的callable参数,在自己内部调用callable参数

    调用次序

    每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回None,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。
    中间件不用继承自任何类(可以继承 object ),下面一个中间件大概的样子
     

    系统默认中间件

    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',
    ]

    django 的view 接受请求(request),返回相应(response),这些

    你可以把它想象成一个洋葱:每个中间件类都是一个包裹视图view的“层”,它位于洋葱的核心。 如果请求通过洋葱的所有层(每个层都调用 get_response 将请求传递到下一层),那么一直到核心的视图,响应将通过每一层(以相反的顺序)往外退出。

    如果其中一个层决定短路并返回response,则该层(包括视图)内的洋葱层都不会看到请求或响应。 响应将仅通过请求传入的相同层返回,如果各层返回None,则继续调用其 get_response ,




  • 相关阅读:
    iOS开发 关于启动页和停留时间的设置
    iOS应用开发,全局强制竖屏,部分页面允许旋转的处理
    iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w
    iOS之加载Gif图片
    Node以数据块的形式读取文件
    Nodejs日志管理包
    Java操作SFTP
    Nginx+Nodejs搭建图片服务器
    使用Atlas实现MySQL读写分离
    MySQL-(Master-Slave)配置
  • 原文地址:https://www.cnblogs.com/lxgbky/p/12143156.html
Copyright © 2011-2022 走看看