您的位置:首页 > 编程语言 > Python开发

Python Django 的中间件

2018-09-19 00:03 120 查看

Python Django 的中间件 (仅限于个人理解)

路漫漫其修远兮, 吾将上下而求索。

  • 那么问题来了, 什么是中间件呢 ?
    → 所谓的中间件,就是存在socket和视图函数中间的一种相当于过滤的机构。 简单来说中间件就是 Python Django 中处理HTTP的request和response的,作用域于 Django 全局数据的输入和输出, 功能类似与 Python Flask框架中的请求钩子函数,特定的函数封装了特定的功能,在客户端访问视图之前/之后进行数据的操作处理(具体看自定义的函数功能),Django 框架会在请求的特定时间去执行这些方法。
    在Python项目中一直都在有使用中间件,在django项目中的setting.py(开发环境和生产环境的配置名称会有所不同,具体名称以实际为准)文件中看到MIDDLEWARE配置项:
  • 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’,
    ‘++++’,
    ‘middlewares, MIDD1’
    '添加自定义中间件’
    ] 👆 (就是这里)
    中间件的执行顺序: 由上到下,在由下到上。 (用户有访问请求,会从中间件最上方的request(接收)一直往下执行,最后到视图函数然后再由中间件从下往上的response(返回)给用户) Django处理一个Request的过程是首先通过中间件,然后再通过默认的URL方式进行的。
  • 下面列举下中间件的几种使用方法:
//   展示了五种方法, 在这简单带过如想深入了解还请自行深入查询。
(1)process_request(self,request)
.Django接收到request之后,但仍未解析URL以确定应当运行的view之前。
(2)process_view(self, request, callback, callback_args, callback_kwargs)
.在Django执行完request预处理函数并确定待执行的view之后,但在view函数实际执行之前。
(3)process_template_response(self,request,response)
.此方法是针对pricess_exception方法为前提下触发执行的
(4)process_exception(self, request, exception)
只有在request处理过程中出了问题并且view函数抛出了一个未捕获的异常时才会被调用
(5)process_response(self, request, response)
.调用时机在Django执行view函数并生成response之后。
[/code]
  • 当自定义中间件时的步骤

1.要继承MIDDLEWAREMIXIN类, eg: class MIDD1(MiddlewareMixin):
2.要重写父类方法 eg: def process_response(self,request,response):
3.将类添加到setting.py(配置) 文件中MIDDLEWARE配置项里 如上 ↑👆
( 请恕我直言 ,选择了程序员这一行就代表要不停的敲不停的想不停的删… 总而言之什么问题自己试一试看看成效,千万不要想着别人能给你什么结果,由衷的告诫)

列举中间件的常用场景

1 做IP 限制, 配置在中间件类的列表中,阻止某些ip访问;
2 URL访问过滤, 对请求进行自定义功能筛选;
3 缓存, 对请求进行判定是否在缓存中有所需要的数据并进行返回,减少逻辑操作;
4 压缩, 对response返回数据进行压缩 如gzip所请求的HTML页面
(个人理解,相对来说还是较为浅显。后期会不断更正,如发现错误还请指教。)

如有信息侵权,请联系我,即删。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: