快速上手Django(五) -Django之中间件MIDDLEWARE(SessionMiddleware)-程序员宅基地

技术标签: python  django  中间件  # 快速上手Django  Python  

快速上手Django(五) -Django之中间件MIDDLEWARE(SessionMiddleware)

一、什么是Django中间件MIDDLEWARE

Django官方文档中对于Middleware的介绍:
中间件(Middleware)是一个镶嵌到django的request/response处理机制中的一个钩子(hooks) 框架。它是一个可以修改django全局输入或输出的一个底层插件系统。

如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。

中间件(Middleware)在整个Django的request/response处理机制中的角色如下所示:
HttpRequest -> Middleware -> View -> Middleware -> HttpResponse

总结:中间件允许您在一个浏览器的请求在到达Django视图之前处理它,以及在视图返回的响应到达浏览器之前处理这个响应。

二、中间件的应用场景

我们可以编写自己的中间件实现权限校验,限制用户请求、打印日志、改变输出内容等多种应用场景,比如:

  • 禁止特定IP地址的用户或未登录的用户访问我们的View视图函数
    (1)如果用户访问的是login视图(放过)
    (2)如果访问其他视图,需要检测是不是有session认证,已经有了放行,没有返回login,这样就省得在多个视图函数上写装饰器了!
    一个request到达视图函数前,中间件先对request.user是否验证通过进行判断,然后再进行跳转。
  • 在View视图函数执行前记录用户的IP地址
  • 某些IP访问服务器的频率过高,进行拦截,比如限制每分钟不能超过n次。
  • 在View视图函数执行前传递额外的变量或参数
  • 在View视图函数执行前或执行后把特定信息打印到log日志
  • 在View视图函数执行后对reponse数据进行修改后返回给用户
  • Django对POST表单中携带的CSRF token的全局校验也是通过CsrfViewMiddleware这个中间件进行的

三、Django默认的中间件

当你创建一个新django项目时,你会发现settings.py里已经注册了一些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',
]
  • SecurityMiddleware:为request/response提供了几种安全改进
  • SessionMiddleware:开启session会话支持,无它无session。要应用session,必须开启session中间层
    默认情况下,session数据是存储到数据库中的。我们如何得知呢?可以从Django的默认配置中查看到,Django的默认配置路径是from django.conf import global_settings,我们可以打开然后查看到默认配置。
  • CommonMiddleware:基于APPEND_SLASH和PREPEND_WWW的设置来重写URL,如果APPEND_SLASH设为True,并且初始URL 没有以斜线结尾以及在URLconf 中没找到对应定义,这时形成一个斜线结尾的新URL;如果PREPEND_WWW设为True,前面缺少 www.的url将会被重定向到相同但是以一个www.开头的url。
  • CsrfViewMiddleware:添加跨站点请求伪造的保护,通过向POST表单添加一个隐藏的表单字段,并检查请求中是否有正确的值,无它无csrf保护
  • AuthenticationMiddleware:在视图函数执行前向每个接收到的user对象添加HttpRequest属性,表示当前登录的用户,无它用不了request.user
  • MessageMiddleware:开启基于Cookie和会话的消息支持,无它无message
  • XFrameOptionsMiddleware:对点击劫持的保护

注意:从Django 1.10起, settings.py里注册中间件使用MIDDLEWARE=,而不是MIDDLEWARE_CLASSES= 。

class MyMiddleware(MiddlewareMixin): 和 class SimpleMiddleware(object): 区别

在 Django 中,这两种中间件类有以下区别:
class MyMiddleware(MiddlewareMixin):

  • 这种中间件类继承自 MiddlewareMixin ,需要实现 process_request , process_response ,process_view , process_exception 四个方法中的一个或多个。
  • MiddlewareMixin 类已经实现了 initcall 方法,所以我们只需要重写需要的方法即可。
  • 这是 Django 推荐的中间件写法。
    例如:
    python
    from django.utils.deprecation import MiddlewareMixin

class MyMiddleware(MiddlewareMixin):
def process_request(self, request):
print(‘Process request’)
class SimpleMiddleware(object):

  • 这种中间件类继承自 object ,需要实现 init , call , process_request , process_response ,process_view , process_exception 这六个方法。
  • 我们需要自己实现 initcall 方法来调用 process_request 等方法。
  • 这种写法较老,Django 现推荐使用 MiddlewareMixin 。

例如:

class SimpleMiddleware(object):
    def 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/inthat/article/details/126934319

智能推荐

PMP 考试的含金量怎么样?-程序员宅基地

文章浏览阅读815次。这么说吧,如果你是真心想往项目管理岗位发展,那么不是说PMP 证书有多牛,但,能证明你掌握了系统、科学 PMP 基础知识,所以。之前看到一句话,但经验是需要积累的,经过系统的学习,你的思维更结构化,这也是 PMP 的价值之一。用一张图形容就是大概是这样的。,养成项目管理的思维模式之后,工作能力和工作效率都会得到相应的提升,也能更好的理解高层的的意图,完成领导交付的任务,获得更多升值加薪的机会。

BUUCTF--Reverse(21~30)_buuctf 文件加壳和脱壳-程序员宅基地

文章浏览阅读97次。分析代码:byte_6CC0A0第一个字符与v1(前8位,v4[0])异或为f,byte_6CC0A3与v4[3]异或为g,对应flag第一和第四个字符。分析代码:伪代码中关键函数是sub_401080,只有v5=byte_40E0E4时,进入下面if时才提示flag正确。IDA查看脱壳后文件发现花指令,将花指令nop,即将call改为nop(E8改为90),再将相关txt编成函数(P键)。分析代码:sub_40100A()和sub_401019()代码分析推测是哈希算法。即(a1-16)为flag。_buuctf 文件加壳和脱壳

Qt连接数据库失败常用解决方法_isql成功 qt失败-程序员宅基地

文章浏览阅读349次。qt连接mysql失败的一些小方法_isql成功 qt失败

系统盘备份/恢复桌面软件设计案例分享_备份界面设计-程序员宅基地

文章浏览阅读145次。小伙伴们现在还有装机的需求吗?以前装机会经常用到各种优盘PE系统、ghost之类的软件,现在好像都停留在win10和win11了,靠微软推送更新就行。_备份界面设计

Java异常 #匿名xxx不是抽象的, 并且未覆盖java.util.function.Predicate中的抽象方法test_不是抽象的, 并且未覆盖org.apache.spark.api.java.function.fla-程序员宅基地

文章浏览阅读5.2k次。1.异常现象Maven install 的时候,出现异常:不是抽象的, 并且未覆盖java.util.function.Predicate中的抽象方法test(java.util.Map<java.lang.String,java.lang.Object>)[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on proje_不是抽象的, 并且未覆盖org.apache.spark.api.java.function.flatmapfunction中的

Adobe 全家桶系列卸载工具_adobe全家桶卸载工具-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏2次。今天清理电脑上不用的软件时,无意想删除上学期所学的PS软件和DW以及AE软件,当我进入程序和功能还是腾讯的软件管家都无济于事,卸载不掉了。还好我发现了Adobe Creative Suite Cleaner Tool这个小工具,它可以完美地清除电脑上所安装的所以Adobe软件,在这里分享给大家。下载地址:点击打开链接_adobe全家桶卸载工具

随便推点

使用Typora编写文档的总结_typora编辑doc-程序员宅基地

文章浏览阅读6.1k次,点赞8次,收藏35次。文章目录简介Basice Use of Typora菜单标题引注序列无序序列有序序列代码多行代码单个代码词句表格脚注水平线链接超链接URLs图片斜体加粗斜体加粗删除线下标上标高亮下标上标高亮Draw Diagrams With TyporaSequence diagramsFlowchart简介Typora是一款很实用的 Markdown 编辑软件,通过学习 Markdown 的语法以及 Ty..._typora编辑doc

Chip Thermal Model(CTM) 详解-程序员宅基地

文章浏览阅读1.5k次。CTM 的基本原理是将芯片划分为若干小块,每个小块内部的温度和相邻小块的温度有关。CTM 模型的计算涉及到很多参数,如芯片的尺寸、散热结构、电源功率、芯片的热导率、比热等。CTM 建立在热传导方程和热扩散方程的基础上,通过对芯片的物理特性进行建模,计算芯片内部的温度分布和表面温度。通过分析芯片的温度分布,可以确定哪些部分的温度过高,有可能导致芯片失效或缩短寿命,从而提前采取措施,避免故障发生。近年来,芯片的集成度和堆叠程度(3DIC)在不断的增加,其带来的热效应的影响也越来越明显。_chip thermal model

使用Eclipse开发程序:实现输出helloword_使用eclipse编译器,创建hel loworld类,实现在控制台上打印输出“the first -程序员宅基地

文章浏览阅读702次。标题使用Eclipse开发程序:实现输出helloword首先打开eclipse_使用eclipse编译器,创建hel loworld类,实现在控制台上打印输出“the first de

optionParser_java传参管理--optionparser解析-程序员宅基地

文章浏览阅读168次。Python optionParser模块的使用方法2012年11月19日 14:33:00阅读数:47809Python 有两个内建的模块用于处理命令行参数:一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数;另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。示例from optpa..._java传参管理--optionparser解析

浅谈Java中的多态_java多态有了解么-程序员宅基地

文章浏览阅读108次。面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点!!!多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用:消除类型之间的耦合关系。现实中,关于多态的例子不胜枚举。_java多态有了解么

黑马头条 xxl-job_黑马头条项目xxl-job视频-程序员宅基地

文章浏览阅读356次,点赞7次,收藏4次。我是南城余!阿里云开发者平台专家博士证书获得者!欢迎关注我的博客!一同成长!一名从事的worker,记录分享学习。专注于AI,,windows系统领域的分享!参考文章。_黑马头条项目xxl-job视频

推荐文章

热门文章

相关标签