标签:调用 process request middleware 中间件 django AOP Django
Django切入函数:
构造函数__init__:没有参数,服务器响应第一个请求的时候自动调用,用户确认是否启用该中间件。
process_request(self,request):在执行分发器前被调用,每个请求上都会调用,不主动进行返回或者HttpResponse对象。
process_view(self,request,view_func,view_args,view_kwargs):在执行视图之前被调用,每个请求上都会调用,不主动进行返回或者HttpResponse对象。
process_template_response(self,request,response):在视图刚好执行完成后进行调用,每个请求都会调用,不主动进行返回或者HttpResponse对象。
process_response(self,request,response):所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回,或者返回HttpResponse对象。
process_exception(self,request,exception):当视图抛出异常时调动,不主动进行返回或者返回Httpresponse对象。
自定义中间件流程
1、在工程目录下创建middleware目录
2、目录中创建一个python文件
3、在python文件中导入中间件的基类
from django.utils.deprecation import MiddlewareMixin
4、在类中根据功能需求,创建切入需求类,重写切入点方法
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin
# Mixin:混合多继承。
# 带有Mixin的类一般用作基类,或者是用作多继承使用。
class HelloMiddle(MiddlewareMixin):
def process_request(self,request):
print(request.META.get("REMOTE_ADDR"))
def process_exception(self,request, exception):
print(request, exception)
return redirect(reverse('app:index'))
5、启用中间件,在settings中进行配置,MIDDLEWARE中添加middleware.文件名.类名
MIDDLEWARE = [
"middleware.LearnMiddle.HelloMiddle", # 自定义中间件
'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',
]
AOP中间件:
实现统计功能
统计IP
统计浏览器
实现权重控制:
黑名单
白名单
实现反爬:
反爬虫
实现频率控制
应用交互友好化
中间件调用顺序:
中间件注册的时候是一个列表
如果没有在切点处直接返回,中间件会一次执行
如果我们直接进行了返回,后续的中间件就不再执行
标签:调用,process,request,middleware,中间件,django,AOP,Django 来源: https://blog.csdn.net/m0_57133702/article/details/120630325
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。