django中的中间件

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

1. 什么是中间件

中间件是django的门户,在请求响应进入进出django的时候,都需要先经过中间件,用来全局改变django的输入和输出。

django中自带7个中间件,每个中间件都有其特定的功能,并且django支持自定义中间件。
  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. ]
复制代码
2. 为什么要有中间件

django中涉及到全局相关的功能,都可以利用中间件来完成,例如:
1.全局身份的校验
2.全局用户权限的校验
3.全局访问频率的校验等等
3. 如何自定义中间件

django给自定义中间件类提供了5个自定义的方法,分别是:
1.process_request
2.process_response
3.process_view
4.process_templates_response
5.process_exception
前两个必须掌握,后三个了解即可!
自定义的步骤:
1.在项目文件或者应用文件下创建一个任意名称的文件夹
2.在该文件夹内创建一个任意名字的py文件
3.在该py文件中定义一个类,该类必须继承MiddlewareMixin类
(需要导入MiddlewareMixin类,from django.utils.deprecation import MiddlewareMixin)
4.定义的类里面必须至少有一个自定义方法
5.在setting.py里面注册该中间件的路径

3.1 process_request方法详解

1.请求来的时候会经过每一个中间件的process_request方法,经过的顺序是setting.py里中间件注册的顺序从上往下
2.该方法有一个request参数
3.如果中间件里没有该方法,则直接跳过该中间件,执行下一个。
4.如果该方法中返回了HttpResponse对象,则请求将不在往下执行,直接走同级的process_response返回
(flask框架是需要走完所有的类似于proces_response方法)
5.process_request就是用来作全局相关的所有限制功能
3.2 process_response方法详解

1.响应走的时候会经过每一个中间件的process_response方法,经过的顺序是setting.py里中间件从下往下的顺序
2.该方法有两个参数request和response参数
3.该方法必须返回一个HttpResponse对象,默认是返回response,即return response;也可以自定义返回其他
4.如果中间件里没有该方法,则直接跳过该中间件,执行下一个。
3.3 其他需要了解的方法
  1. process_view
  2.         路由匹配成功之后执行视图函数之前,会自动执行中间件里面的该放法
  3.         顺序是按照配置文件中注册的中间件从上往下的顺序依次执行
  4. process_template_response
  5.         返回的HttpResponse对象有render属性的时候才会触发
  6.         顺序是按照配置文件中注册了的中间件从下往上依次经过
  7. process_exception
  8.         当视图函数中出现异常的情况下触发
  9.         顺序是按照配置文件中注册了的中间件从下往上依次经过
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表