• 所谓拦截器或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 ,




  • 相关阅读:
    数据结构 课程安排 (拓扑排序)
    数据结构 通畅工程 (最小生成树)
    01 C#基础
    计算机组成原理——第一章 系统概述
    数据结构——第八章 排序 第九章 文件
    数据结构——第七章 查找
    字符编码(转)
    数据结构——第六章 图
    NodeJS加密算法(转)
    入职总结
  • 原文地址:https://www.cnblogs.com/lxgbky/p/12143156.html
Copyright © 2020-2023  润新知