ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python_django_中间件

2019-11-30 10:54:59  阅读:222  来源: 互联网

标签:python 中间件 middleware request django process self


什么是中间件?

可以介入django的请求和响应的轻量级的底层插件,它其实就是一个python类,我们在settings配置文件中的↓↓↓↓,都是中间件

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',
]

这个python类中的方法运行于每个请求中(其中方法执行的位置为↓↓↓):

方法:

__init__ 不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件
process_request(self,request)

在分配url之前被调用,返回None或HttpResponse对象
判断是否是多次请求(的攻击),

process_view(self,request,view_func,view_args,view_kwargs) 调用视图views之前被调用,返回None或HttpResponse对象
process_template_response(self,request,response)

在视图views刚好执行完后(在view正要去匹配template的html的过程中)被调用,返回None或HttpResponse对象

process_response(self,request,response)

所有响应返回浏览器之前调用(templates要返回页面给浏览器了),返回HttpResponse对象

process_exception(self,request,exception) 当视图抛出异常时调用,返回HttpResponse对象

自定义中间件:

1、创建中间件文件

  1. 在应用级myapp下写中间件函数
  2. 在项目下创建middleware目录,并在目录下创建myapp目录,在下面编写py文件
  3.  

2、自定义中间件

from django.utils.deprecation import MiddlewareMixin
# 所有自定义中间件都要继承MiddlewareMixin模块

class mymiddle(MiddlewareMixin):
    def process_request(self,request):
        print('get参数为:', request.GET.get('a'))

3、使用自定义中间件

配置settings.py 文件:MIDDLEWARE = ['middleware.myapp.myMiddle.MyMiddle',]   # 中间件函数的路径

 

注:浏览器的每个请求都会执行中间件

标签:python,中间件,middleware,request,django,process,self
来源: https://www.cnblogs.com/Vera-y/p/11961598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有