zoukankan      html  css  js  c++  java
  • Django进阶-middleware(中间件)

    middleware (中间件)

    是一个完整socket请求过程中必须经过的步骤 客户端发起request--->中间件request--->views处理--->中间件response--->客户端
    如果在中间件中请求出错,则直接返回响应
    作用:可以对所有请求做统一操作,也可以进行过滤

    中间件的5个方法:
    process_request
    process_view
    process_exception
    process_exception
    process_template_response
    # 接收请求后首先经过process_request
    def process_request(self, request):
      print('请求1')
      pass

    # 当process_request处理完后,进行路由映射,再返回第一条继续进行处理
    def process_view(self, request, callback, callback_args, callback_kwargs):
      pass

    # 当views处理完,且其中有错时,就会自动调用此方法,可返回给页面错误信息(没有错就不执行)(执行顺序是倒序,
    # 但如果和views最近的没有进行处理则往上查,查到后处理并返回最后一条进行process_response)
    def process_exception(self, request, exception):
    return HttpResponse('页面出错了!!!')

    # 当views处理完成之后倒序的进行返回,所以必须要有return response
    def process_response(self, request, response):
    return response

    # 如若views返回的内容中有render方法,则会执行
    def process_template_response(self, request, response):
     

    MIDDLEWARE = [
        # 'django.middleware.cache.UpdateCacheMiddleware',
        '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',
        'Middle.m1.Row1',
        'Middle.m1.Row2',
        'Middle.m1.Row3',
        # 'django.middleware.cache.FetchFromCacheMiddleware',
    ]
    settings.py
    from django.middleware.csrf import CsrfViewMiddleware
    from django.shortcuts import render,HttpResponse
    
    # from sg import pizza_done
    # pizza_done.send(sender='seven',toppings=123, size=456)  # 写在需要触发的位置
    
    
    class Row1(CsrfViewMiddleware):
        def process_request(self, request):
            pass
            print('请求...1')
        def process_view(self, request, callback, callback_args, callback_kwargs):
            # pass
            print('请求...4')
        def process_response(self, request, response):
            print('响应3')
            return response
    class Row2(CsrfViewMiddleware):
        def process_request(self, request):
            # pass
            print('请求...2')
        def process_view(self, request, callback, callback_args, callback_kwargs):
            # pass
            print('请求...5')
        def process_response(self, request, response):
            print('响应2')
            return response
    class Row3(CsrfViewMiddleware):
        def process_request(self, request):
            # pass
            print('请求...3')
        def process_view(self, request, callback, callback_args, callback_kwargs):
            # pass
            print('请求...6')
        def process_response(self, request, response):
            print('响应1')
            return response
        def process_exception(self, request, exception):
            # pass
            print(exception)
            return HttpResponse(exception)
    m1.py
    
    
  • 相关阅读:
    Kubernetes 升级过程记录:从 1.17.0 升级至最新版 1.20.2
    歼10:职业有个基本属性,为了糊口。然后再区分 主动 or 被动,被动者只是为了糊口,那自然是看不起自己的职业
    红胖子:写给人生的九封信,愿你的人生淡定从容,繁华似锦!!!
    Embarcadero MVP(68位,全部都有个人主页)
    Delphi 26 岁
    C# Assembly 与 Reflection
    你精通那么多技术,为何还是做不好一个项目
    Linux 6 个“吓人”的 命令
    Distributed Application runtime
    RocketMQ and kafka
  • 原文地址:https://www.cnblogs.com/gyk1030/p/9529472.html
Copyright © 2011-2022 走看看