Django - AOP/中间件
一、什么是AOP、什么是中间件
1、什么是AOP
在软件业,AOP
为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
2、什么是中间件
来自于django中间件
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎使用。
django中间价官网定义:
Middleware is a framework of hooks into Django’s request/response processing.
It’s a light, low-level “plugin” system for globally altering Django’s input or output.
中间件位于web服务端与url路由层之间。
中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程)。
中间件的本质是一个python类。
2.1 中间件有什么用?
如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
可能你还想在view执行之前做一些操作,这种情况就可以用middleware来实现。
Django默认的中间件:(在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES
变量,其中每一个元素就是一个中间件,如下)
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.mymid.MyMid1',
# 'app01.mymid.MyMid2',
]
二、可切入点、切面
1、可切入点
Django内置了四大可切入点。
2、切面
切入函数 | 描述 |
---|---|
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对象 |
3、自定义中间件
步骤:
(1)在工程目录下创建middleware目录
(2)目录中间件一个python文件
(3)在python文件中导入中间件基类
from django.utils.deprecation import MiddlewareMixin
(4)在类中根据功能需求,创建切入需求类,重写切入点方法
class LearnAOP(MiddlewareMixin):
def process_request(self,request):
print('request的路径:',request.META.get('REMOTE_ADDR'))
(5)启用中间件,在settings中进行配置,在MIDDLEWARE
中添加
middleware.文件名.类名 # 全路径
电商平台抢手机用例:Django用例:使用中间件实现官网抢手机逻辑
AOP中间件应用场景
(1)实现统计功能
- 统计IP
- 统计浏览器
(2)实现权重控制
- 黑名单
- 白名单
(3)实现反爬
- 反爬虫:10秒之内只能访问1次
- 实现频率控制
还没有评论,来说两句吧...