Django中的中间件

中间件

1·概念:
1·中间件是一个轻量级的底层插件,可以介入到Django的请求和响应过程,(面向切面的编程)。
2·中间件的本质就是一个python类。
2·面向切面的编程(Aspect Orientde Programming)建成AOP。主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合的隔离效果。
3·中间件使用类装饰实现—中间件的典型实现:装饰器。

面向切面编程

面向切面编程
切点
(1)process_request
process_request(self,request):在执行视图前被调用,每个请求上都会调用,不主动进行返回或返回HttpResponse对象

	(2)process_view
		process_view(self,request,view_func,view_args,view_kwargs):调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象
		
	(3)process_template_response	
		process_template_response(self,request,response):在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
		
	(4)process_response
		process_response(self,request,response):所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
		
	(5)process_exception
		process_exception(self,request,exception):当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象
切面
	切点处切开可以获得的数据

实现步骤:
书写,自定义中间件
1. 在工程目录下创建middleware目录
2. 目录中创建一个python文件
3. 在python文件中导入中间件的基类
from django.utils.deprecation import MiddlewareMixin
4. 在类中根据功能需求,创建切入需求类,重写切入点方法
class LearnAOP(MiddlewareMixin):
def process_request(self,request):
print(‘request的路径’,request.GET.path)
5. 启用中间件,在settings中进行配置,MIDDLEWARE中添加
middleware.文件名.类名
应用:
白名单
def get_phone(request):
if random.randrange(100) > 95:
return HttpResponse(“恭喜你抢到了小米8”)
return HttpResponse(“正在排队”)
if request.path == “/app/getphone/”:
if ip == “127.0.0.1”:
if random.randrange(100) > 20:
return HttpResponse(“恭喜您免费获取小米8 256G版”)
黑名单
if request.path == “/app/getticket/”:
if ip.startswith(“10.0.122.1”):
return HttpResponse(“已抢光”)
作业:如果一分钟之内访问了10次 那么返回 小爬虫快走开,如果1分钟之内访问了30次 封ip 5分钟 正常访问 返回来了老弟
当某一段业务逻辑发生了错误 那么就会执行process_exception方法
process_exception
界面友好化 应用交互友好化
def process_exception(self, request, exception):
print(request, exception)
return redirect(reverse(‘app:index’))
注意:中间件的执行顺序
中间件注册的时候是一个列表
如果我们没有在切点处直接进行返回,中间件会依次执行
如果我们直接进行了返回,后续中间件就不再执行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值