Django - AOP/中间件

青旅半醒 2023-07-04 14:17 32阅读 0赞

一、什么是AOP、什么是中间件

1、什么是AOP

    在软件业,AOPAspect 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 变量,其中每一个元素就是一个中间件,如下)

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. 'django.middleware.csrf.CsrfViewMiddleware',
  6. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9.   # 'app01.mymid.MyMid1',
  10.   # 'app01.mymid.MyMid2',
  11. ]

二、可切入点、切面

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文件中导入中间件基类

  1. from django.utils.deprecation import MiddlewareMixin

(4)在类中根据功能需求,创建切入需求类,重写切入点方法

  1. class LearnAOP(MiddlewareMixin):
  2. def process_request(self,request):
  3. print('request的路径:',request.META.get('REMOTE_ADDR'))

(5)启用中间件,在settings中进行配置,在MIDDLEWARE中添加

  1. middleware.文件名.类名 # 全路径

电商平台抢手机用例:Django用例:使用中间件实现官网抢手机逻辑


AOP中间件应用场景

(1)实现统计功能

  • 统计IP
  • 统计浏览器

(2)实现权重控制

  • 黑名单
  • 白名单

(3)实现反爬

  • 反爬虫:10秒之内只能访问1次
  • 实现频率控制

发表评论

表情:
评论列表 (有 0 条评论,32人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Django中间技术

    怎么理解中间件呢,其实如果你使用过java和数据库你就知道,中间件技术是两个模块中间的桥梁,就好比两块大陆之间的一座桥梁 > 如果需要详细了解中间件技术可以查看此文档

    相关 django中间

    中间件函数是django框架给我们预留的函数接口,让我们可以干预请求和应答的过程。 ![1682918-20190610110717958-1367766905.png][]