首页 > 其他分享 >Django框架之中间件思想

Django框架之中间件思想

时间:2024-03-25 18:11:56浏览次数:20  
标签:框架 middleware py 中间件 module django notify 模块 Django

【一】引入

  • 我们在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',
]

【二】推导过程

  • 以一个多平台发送消息为例子

  • 首先需要向django中间件一样定义一个列表

# 这里我写在一个setting.py文件里面
# 列表里面的字符串就是对应模块的路径
NOTIFY_LIST = [
    'notify.email.Email',
    'notify.qq.QQ',
    'notify.wechat.Wechat',
]

# 然后我又创建了一个notify包,里面写了三个py文件分别定义了对应的类
--notify
	--__init__.py
    --email.py
    --qq.py
    --wechat.py
    
# 三个模块的内容,都类似于这样,按照鸭子类型都写一个sent方法
class Email:
    def __init__(self):
        pass

    def send(self, content):
        print(f'email通知:>>>{content}')
        
# 最关键的部分在__init__.py 这里
# 导入配置文件以获取那个列表
from file import settings
# 导入模块,以达到字符串导入模块的方法
import importlib

# 定义一个函数来发送消息
def send_all(content):
    # 用for循环得到每一个字符串
    for path_str in settings.NOTIFY_LIST:
        # 利用字符串切割的方法分别得到功能模块的路径和功能类名称
        module_path, class_name = path_str.rsplit('.', maxsplit=1)

        # 1.利用字符串导入模块
        module = importlib.import_module(module_path)
        # 2.利用反射获取类名
        cls = getattr(module, class_name)
        obj = cls()
        obj.send(content)

        
# 最后再定义一个启动文件start.py
import notify

notify.send_all('我开心就好')

标签:框架,middleware,py,中间件,module,django,notify,模块,Django
From: https://www.cnblogs.com/Hqqqq/p/18095008

相关文章

  • Django框架之auth模块
    【一】Auth模块引入auth模块是django自带的用户认证模块当我们开发一个网站的时候,无可避免的需要设计实现网站的用户登陆系统。此时我们需要实现包括用户的注册,登录,全局登录认证,注销,修改密码等等,如果要靠自己一点点敲代码完成,那实在是太繁琐了Django为我们提供的Auth模块......
  • express中间件
    听的不是很懂,不知道具体有多大的作用。绑定到app实例上的中间件,都可以叫做  应用级中间件;错误级别中间件: 这有一点需要注意,就是错误级别中间件要放在路由的后面,和其他中间件不一样,他们都必须要写在路由前面。 express内置的中间件:这一部分也是听的好没意思,用gpt生成......
  • Django框架静态文件
    【一】静态文件配置说明【1】模板文件通常html文件都会放在templates文件夹下【2】资源文件资源文件也就是jQuery,bootstrap这些前端框架这些都统称为静态文件,通常默认是放在static文件夹里面的static内部又通常分为以下三部分cssjssimgplugins【二】静态文件配......
  • Django框架之ORM操作
    【一】配置数据库【1】默认数据库在settings.py文件中的DATABASES字典就是用来配置数据库的默认的数据库是django自带的数据库是sqlite3DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'db.sqlite3',......
  • Django框架之requests对象
    【一】requests对象引入【1】提交GET请求前端form表单中action属性,如果不写的话,默认就是向当前路由请求form表单中的method属性,如果不写默认就是GET请求<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>{%lo......
  • Django框架之视图层
    【一】视图层三板斧HttpResponse非常重要,因为三板斧的三个方法返回的都是HttpResponse对象通过看源码可以发现各种各样的类,最终都是由HttpResponse这个类继承而来的【1】HttpResponseHttpResponse是Django中用于创建HTTP响应的一个类,它可以方便的把一些自定义的文本内容或......
  • Django框架之路由层
    【一】Django的路由系统【1】什么是URL配置URL调度器|Django文档|Django(djangoproject.com)URL配置的本质就是让URL与视图函数之间有对应的关系当在浏览器输入对应的URL,django就能通过URL配置去找对应的视图函数【2】基本格式##Django1.x版本语法fromdjango.co......
  • Django框架之模板层
    【一】模板语法的传取值模板语法需要记两组符号,分别是{{}}和{%%}{{}}通常是与变量相关的{%%}通常是与逻辑相关的【1】传值模板语法可以传递python所有的数据类型,包括函数和类,以及类实例化的对象传递函数的时候,函数需要有返回值,要不然在页面显示的结果就是None模板语法......
  • 基于java中的springboot框架实现学生宿舍管理系统的设计与开发演示【附项目源码+论文
    基于springboot实现学生宿舍管理系统的设计与开发演示摘要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对学生宿舍信息管理混乱,出错率高,信息安全性差,劳动强......
  • 基于java中的SpringBoot框架实现企业客户管理系统演示【附项目源码+论文说明】
    基于SpringBoot实现企业客户管理系统演示摘要本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述企业客户管理系统的当前背景以及系统开发的目的,后......