Django middleware e solicitação de ciclo de vida
Personalizado fluxo intermediário (Caso em process_request Method)
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 é chamadoxx.py
.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('滚犊子!!') # 验证未通过,直接返回给浏览器
middleware acabado é de nenhum uso, é preciso
settings.py
escrever 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:
Middleware com o processo de manuseamento de excepção é realizada:
ciclo de vida do pedido Django
Django procedimento de solicitação de processamento é o seguinte quando o bloqueio problemas com o navegador FIG:
pedido Django mais fluxograma detalhado: