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
    
    
  • 相关阅读:
    js 面试的坑:变量提升
    meta 标签大全
    一个极为简单的requirejs实现
    AMD 的 CommonJS wrapping
    浅解析js中的对象
    javascript运动系列第二篇——变速运动
    开发汉澳即时通信网,2006年上线,QQ死期到了
    SpringMVC中的异步提交表单
    HDU 3698 DP+线段树
    黑马程序猿_反射、内省、泛型
  • 原文地址:https://www.cnblogs.com/gyk1030/p/9529472.html
Copyright © 2011-2022 走看看