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 ,




  • 相关阅读:
    [HDFS Manual] CH6 HDFS Federation
    [HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager
    [HDFS Manual] CH3 HDFS Commands Guide
    [HDFS Manual] CH2 HDFS Users Guide
    [HDFS Manual] CH1 HDFS体系结构
    [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存
    [MySQL Status] Queries,Questions,read/s区别,Com_Commit和handle_commit
    [MySQL TroubleShooting] 服务启动报错
    [MySQL Code]Innodb 锁分配和锁冲突判断
    [MySQL Reference Manual]17 Group Replication
  • 原文地址:https://www.cnblogs.com/lxgbky/p/12143156.html
Copyright © 2011-2022 走看看