Django middleware e solicitação de ciclo de vida

Django middleware e solicitação de ciclo de vida

Personalizado fluxo intermediário (Caso em process_request Method)

  1. Crie uma pasta na aplicação do nome seguinte casualmente, por exemplo mymiddleware. Py criar um arquivo nessa pasta, o nome casualmente, por exemplo, ele é chamado xx.py.

  2. Nas aulas definição de arquivo xx.py, métodos de classe são usados ​​para processar o pedido, redigido da seguinte forma:

    from django.shortcuts import redirect,HttpResponse,render
    from django.utils.deprecation import MiddlewareMixin    # 引入django这个类
    
    class Auth(MiddlewareMixin):    # 继承这个类
        # 白名单,认证白名单
        white_list = ['/login/',]
        # 想对请求进行统一的处理,那么就定义一个process_request方法
        def process_request(self,request):    
            # 如果方法返回值是None,那就通过了这个方法的认证或者处理,请求会继续处理下去。如果返回的值HttpResponse对象,那么请求到这里就结束了,直接返回给了浏览器。
            if request.path in self.white_list:
                pass
            else:
                is_login = request.session.get('is_login')
                if is_login == True:
                    pass    # 通过验证,继续执行逻辑
                else:
                    return HttpResponse('滚犊子!!')    # 验证未通过,直接返回给浏览器
  3. middleware acabado é de nenhum uso, é preciso settings.pyescrever o arquivo de configuração caminho de classe, o middleware do aplicativo:

    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',
    
        'app01.mymiddleware.xx.Auth',    # 按照导包路径,应用中间件
    ]

método process_response

para punho

def process_response(self,request,response):
    '''
    :param request:
    :param response:  就是视图的返回值(HttpResponse对象)
    :return:
    '''
    # print(response)
    return response

process_view e a ordem em teste middleware

from django.shortcuts import redirect,HttpResponse,render

# 引入django的模块
from django.utils.deprecation import MiddlewareMixin


class MD1(MiddlewareMixin):

    def process_request(self,request):

        print('MD1--process_request')

        return HttpResponse('xxxlpapsjdfoajsdfh')

    def process_response(self, request,response):
        print('MD1--process_response')
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        print('MD1---',view_func.__name__)
        # view_func就是url对应那个views里面的视图函数,视图函数的参数view_args, view_kwargs

class MD2(MiddlewareMixin):

    def process_request(self, request):
        print('MD2--process_request')

    def process_response(self, request, response):
        print('MD2--process_response')
        return response
    def process_view(self, request, view_func, view_args, view_kwargs):
        print('MD2---',view_func.__name__)

Outros métodos Middleware

Aprendemos três métodos de middleware: process_request, process_respond e process_view:

  • process_request é chamado antes da distribuição rota para o processamento de solicitações de dados;
  • process_respond algum processamento antes resposta wsgi;
  • Depois de encaminhamento process_view distribuir, executar antes de entrar a função de visão.

Além disso, existem dois métodos de middleware, process_exception e porcess_remplate_response:

  • process_exception realizada quando a vista é anormal, se nenhuma anormalidade não é executada;
  • process_template_response reescrito só tem um efeito sobre a resposta do objecto resposta método render.

Os princípios básicos são os seguintes:

from django.shortcuts import redirect,HttpResponse,render
from django.utils.deprecation import MiddlewareMixin

class MD1(MiddlewareMixin):

    def process_request(self,request):
        print('MD1--process_request')
        
    def process_response(self, request,response):
        print('MD1--process_response')
        return response
        
    def process_view(self, request, view_func, view_args, view_kwargs):
        print('MD1---',view_func.__name__)

    # 视图有错误,执行中间件的process_exception方法,没错不执行
    def process_exception(self, request, exception):
        print('MD1:process_exception',exception)

    def process_template_response(self, request, response):
        print("MD1 中的process_template_response")
        return response


class MD2(MiddlewareMixin):

    def process_request(self, request):
        print('MD2--process_request')

    def process_response(self, request, response):
        print('MD2--process_response')
        return response
    def process_view(self, request, view_func, view_args, view_kwargs):
        print('MD2---',view_func.__name__)

    def process_exception(self, request, exception):
        print('MD2:process_exception',exception)

    def process_template_response(self, request, response):
        print("MD2 中的process_template_response")
        return response

Exemplo resposta tornar reescrever método objecto:

def index(request):

    def render():
        print('index函数内部的render')
        return HttpResponse('xxxx')

    ret = HttpResponse('ok')
    ret.render = render
    return ret

Middleware geralmente sequência de execução é como se segue:

img

Middleware com o processo de manuseamento de excepção é realizada:

img

ciclo de vida do pedido Django

Django procedimento de solicitação de processamento é o seguinte quando o bloqueio problemas com o navegador FIG:

1575292152675

pedido Django mais fluxograma detalhado:

img

Acho que você gosta

Origin www.cnblogs.com/shuoliuchina/p/12521595.html
Recomendado
Clasificación