首页 > 其他分享 >django中的中间件

django中的中间件

时间:2022-08-20 11:24:13浏览次数:105  
标签:自定义 process middleware 中间件 django response

1. 什么是中间件

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

django中自带7个中间件,每个中间件都有其特定的功能,并且django支持自定义中间件。

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

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里面注册该中间件的路径

image

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 其他需要了解的方法

process_view
	路由匹配成功之后执行视图函数之前,会自动执行中间件里面的该放法
	顺序是按照配置文件中注册的中间件从上往下的顺序依次执行

process_template_response
	返回的HttpResponse对象有render属性的时候才会触发
	顺序是按照配置文件中注册了的中间件从下往上依次经过

process_exception
	当视图函数中出现异常的情况下触发
	顺序是按照配置文件中注册了的中间件从下往上依次经过

标签:自定义,process,middleware,中间件,django,response
From: https://www.cnblogs.com/suncolor/p/16601971.html

相关文章

  • 中间件
                                                         ......
  • django中配置apscheduler,并解决运行两次的问题
    创建了一个独立的app,准备把定时器执行的内容放在这里pythonmanage.pystartappcron_jobs 在应用目录下创建目录autotask1.创建task.py文件,写入要执行的内容#-*-......
  • django model设置SQL表注释和字段注释
    过修改django配置文件,将model里面的的verbose_name作为数据库的COMMENT,也就是注释信息。第一步:找到如下路径:  注意:如果你是在虚拟环境下搭建的项目,注意到虚拟环境下......
  • ASP.NET Core自定义中间件的方式
    ASP.NETCore应用本质上,其实就是由若干个中间件构建成的请求处理管道。管道相当于一个故事的框架,而中间件就相当于故事中的某些情节。同一个故事框架采用不同的情节拼凑,最......
  • django中的cookie与session
    发展史1.早期的时候,网站都没有保存用户功能的需求,所有用户访问网站返回的结果都是一样的,比如新闻、文章等网站!2.但是,随着网站的发展,出现了一些需要保存用户信息的网站,比......
  • Django TextField
    如下图,官方文档中解释含义:即使设置了max_length,只会在前端表单的Textarea框中输入有限制. 并没有在模型表或数据库MySQL中被限制. ......
  • .NET Core:中间件系列(三):中间件限流
    中间件微软官网定义:中间件中间件意思就是处理请求和响应的软件:1、选择是否将请求传递到管道中的下一个组件。2、可在管道中的下一个组件前后执行工作。对中间件类......
  • 16 Django-extra查询
    知识点补充:如何只拿出,dt字段中的年月字段?知识点补充:extra有些时候复杂的sql语句,Django无法去对应。extra(select=None,where=None,params=None,tables=None,ord......
  • django插入数据库报错 1366, "Incorrect string value: '\\xF0\\x9F\\x9A\\xA
     报错: 1366,"Incorrectstringvalue:'\\xF0\\x9F\\x9A\\xA8 是因为mysql不能识别4个字节的utf8编码的字符,抛出了异常,这应该也是问题的根源。☺、��、类似于这种4个字......
  • django-haystack使用whoosh创建索引
    快速入门环境安装首先需要清楚以下各个库的作用django是基于python开发的web框架,阅读本文需要了解相关的基础知识django-haystack为Django提供模块化搜索。它具有......