Django | 从中间件的角度来认识Django发送邮件功能

news2025/1/19 19:31:56

文章目录

    • 概要
    • 中间件
      • 中间件 ---> '钩子'
      • 实现中间件
      • demo
    • 邮件发送过程
      • Django如何做
        • 邮件服务配置流程
    • 中间件结合邮件服务实现告警

概要

  • 摘要
    业务告警 邮件验证 密码找回

  • 邮件告警
    在这里插入图片描述

中间件

在这里插入图片描述

中间件 —> ‘钩子’

例如 访问路由 的次数【请求】

在这里插入图片描述

  • 中间件类须实现下列五个方法中的一个或多个:
#请求过滤   拦截 到达 路由前
1.process_request(self,request) 
执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象

# 通过路由后  到达视图前    拦截  可以更换视图的参数
2.process_view(self,request,callback,callback_args,callback_kwargs)
调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象

# 返回浏览器之前
3. process_response(self,request,response)
所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象

# 出现异常
4.process_exception(self,request,exception)
当处理过程中抛出异常时调用,返回一个HttpResponse对象

# 不常用
5.process_template_response(self,request,response)
在视图函数执行完毕且试图返回的对象中包含render,方法时被
调用;该方法需要返回实现了render.方法的响应对象

实现中间件

  • settings.py
    在这里插入图片描述

注意:配置为数组,中间件被调用时以先上到下由下到上的顺序调用

  • 项目目录下创建middleware文件夹 自定义py文件写类
    在这里插入图片描述
    中间件中的大多数方法在返回None时表示忽略当前操作进入下一项事件,当返回HttpResponese对象时表示此请求结束【就是出现问题了】,直接返回给客户端

demo

  • 案例
    在这里插入图片描述
  1. 创建 文件夹middleware
  2. 创建mymiddleware.py文件
  3. 创建类VisitLimit
class VisitLimit(MiddlewareMixin):

    visit_times = {}

    def process_request(self,request):

        ip_adress = request.META['REMOTE_ADDR']
        path_url = request.path_info
        print('path :',path_url)


        if not re.match('^/test',path_url): # 正则表达式匹配 /test  开头的网址
            return

        # 计数  每个都要计算   最好是内存数据库  例如redis  后面学
        times = self.visit_times.get(ip_adress,0) # 没有 设置0
        print('ip',ip_adress,'已经访问',times)
        self.visit_times[ip_adress] = times + 1
        if times < 5:
            return
        return HttpResponse('您已经访问过'+str(times)+'次,访问被禁止')

        # 若要是从新测试 需要 crtl + c 关掉服务 重新 python manage.py runserver  释放类变量
  1. settingspy注册中间件
    在这里插入图片描述

邮件发送过程

  • SMTP 简单邮件传输协议 25 端口 推送协议
  • IMAP 交互式邮件访问协议 143端口 拉取协议
  • 邮件相关协议 POP3 110 端口 拉取协议

更多详情 : SMTP/IMAP服务

一个动作 一个协议
在这里插入图片描述

django在这里充当客户端的功能

Django如何做

在这里插入图片描述

邮件服务配置流程
  1. 申请QQ号
  2. 用QQ号登陆QQ邮箱并修改设置
    • 用申请到的QQ号和密码登陆到https://mail.qq.com/
    • 修改QQ邮箱->设置->帐户->“POP3/IMAP.…服务”
      在这里插入图片描述
  • settings.py配置
    在这里插入图片描述
  • 函数调用

中间件结合邮件服务实现告警

  • 要求
    在这里插入图片描述

  • settings.py配置 邮件所需服务
    在这里插入图片描述

  • mymiddleware.py 创建类和相应的类处理方法 【追溯错误代码行 发送邮件给出错误

class ExceptionMW(MiddlewareMixin):

    def process_exception(self,request,exception):

        print(exception)  # 这是错误 : name 'a' is not defined
        print(traceback.format_exc())  # 追溯出问题的代码所在位置

        mail.send_mail(subject='project error',message=traceback.format_exc(),from_email=settings.EMAIL_HOST_USER,recipient_list=settings.EX_EMAIL)
		# EMAIL_HOST_USER   from_email='xxx@qq.com'也可以   作用相同 

        return HttpResponse('--- 对不起  当前网页有点忙  ')
  • views.py中写一个错误 来让中间件类中的方法捕获
def test_upload(request):
    if request.method == 'GET':
        a  # 自定义一个错误让中间件进行捕获
        return render(request,'test_upload.html')
    elif request.method == 'POST':
        title = request.POST['title']
        myfile = request.FILES['myfile']

        Content.objects.create(title=title,picture=myfile)
        return  HttpResponse('上传文件成功!')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

商业模式画布全面解读:产品经理的实用手册

在产品经理的日常工作中&#xff0c;最基本的一项任务就是进行竞品分析和商业模式分析。一方面&#xff0c;通过竞品分析环节&#xff0c;了解当前产品的竞争力和不可替代性&#xff1b;另一方面&#xff0c;定期评估产品的商业模式是否存在风险&#xff0c;是否具有可持续性。…

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云&#xff0c;波澜再兴&#xff0c;GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00&#xff08;GMT8&#xff09;&#xff0c;现已正式开启&#xff01; 这是一个由人、游灵和神灵共存的世界&#xff0c;历经蛮荒时期的纷争与信…

Docker的安装与镜像配置

小编目前大一&#xff0c;刚开始着手学习SSM&#xff0c;小编会把每个框架都整理成知识点发布出来。如果你也同时在学习SSM的话&#xff0c;不妨看看我做的这个笔记。我认为同为初学者&#xff0c;我把我对知识点的理解以这种代码加观点的方式分享出来不仅加深了我的理解&#…

游泳耳机哪个牌子好?角逐必选榜的4大王者游泳耳机测评解析!

在选择游泳耳机时&#xff0c;许多消费者往往会被市场上五花八门的产品所困扰。特别是那些标榜能够防水防潮的产品&#xff0c;但实际上它们往往缺乏核心技术支持&#xff0c;存在很高的损伤风险。据调查&#xff0c;超过90%的用户反映&#xff0c;市面上的游泳耳机常常无法达到…

centos7.9离线安装kubernetes(k8s)1.28版本

文章目录 一、环境准备二、所有节点执行1、解压安装包2、创建/etc/modules-load.d/containerd.conf配置文件3、执行以下命令使配置生效4、创建/etc/sysctl.d/99-kubernetes-cri.conf配置文件5、加载ipvs内核模块–4.19以上版本内核6、授权生效7、关闭swap&#xff0c;并永久关闭…

WPF——动态排名图表实现

开发环境 VS2022 .NET 8.0 MVVM Toolkit 8.2.2 需求 开发中需要实现按照成绩动态指名&#xff0c;以展示当前的竞赛成绩的一个实时情况及变化。 即如下效果&#xff1a; 需求分析 按照接收到的信息&#xff0c;就是要将获取到的集合排序&#xff0c;并且要将排序前后的变…

什么是UDP?

UDP是工作在OSI&#xff08;开放系统互连&#xff0c;Open Systems Interconnection&#xff09;模型中传输层的协议。它使用IP作为底层协议&#xff0c;是为应用程序提供一种以最少的协议机制向其他程序发送消息的协议。其主要特点是无连接&#xff0c;不保证可靠传输和面向报…

汽车线束智能制造:MES系统与工艺深度融合的革新之路

万界星空科技汽车线束工厂MES系统解决方案是针对线束制造行业特定需求而设计的一套集成化管理系统&#xff0c;旨在提高生产效率、优化资源配置、确保产品质量并增强企业竞争力。 一、汽车线束制造工艺 汽车线束&#xff0c;作为连接汽车各个电子部件的桥梁&#xff0c;承载着…

论文:NeRF on the go:Exploiting Uncertainty for Distractor-free NeRFs in the Wild

随时随地使用NeRF。本文的目标是利用在野外随意捕捉的图像序列或视频作为输入&#xff0c;训练一个用于静态场景的NeRF&#xff0c;并有效地移除场景中的所有动态元素&#xff08;如汽车、电车、行人等&#xff09;&#xff0c;即干扰物。与现有的方法如NeRF-W [27]和RobustNeR…

python依赖包安装失败的解决办法(适用于conda安装)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;python依赖包安装失败的解决办法&#xff08;适用于conda安装&#xff09;-CSDN博客 前言&#xff1a;这个问题之前一直困扰着我&#xff0c;因为最近要升级Anaconda-Navigator&#x…

代码随想录算法训练营第十八天(二叉树 六)

力扣题部分: 530.二叉搜索树的最小绝对差 题目链接:. - 力扣&#xff08;LeetCode&#xff09; 题面: 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路: 写关于二…

第T11周:优化器对比实验

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 本次主要是探究不同优化器、以及不同参数配置对模型的影响 &#x1f680;我的环境&#xff1a; 语言环境&#xff1a;Python3.11.…

CSS 布局

CSS 页面布局技术允许我们拾取网页中的元素&#xff0c;并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。布局有一下几种 正常布局流display属性弹性盒子网格浮动定位CSS 表格布局多列布局 每种布局都有它们的用途&#xff0c;各有优缺点&#xff0c;相…

CSS伪类选择器和伪元素

伪类&#xff08;Pseudo-classes&#xff09; 伪类用于定义元素的特殊状态。它们被添加到选择器中以指定元素在其生命周期的特定状态下的样式。伪类不创建新的文档内容&#xff0c;也不创建新的文档树中的元素。相反&#xff0c;它们提供了一种方法来根据元素的状态来应用样式…

统信UOS系统连接打印机操作步骤

系统版本 操作步骤 首先点击开始菜单 搜索框输入打印&#xff0c;点击打印管理器 点击图下所示的号 按照图下所示&#xff0c;手动查找->输入打印机的ip地址->点击查找 等到如图下所示&#xff0c;出现打印机的时候&#xff0c;选择打印机&#xff0c;然后选择驱动&…

嵌入式AI快速入门课程-K510篇 (第三篇 环境搭建及开发板操作)

第三篇 环境搭建及开发板操作 文章目录 第三篇 环境搭建及开发板操作1.配置VMware使用桥接网卡1.1 vmware设置1.2 虚拟网络编辑器设置 2.安装软件2.2 安装 Windows 软件2.3 使用MobaXterm远程登录Ubuntu2.4 使用FileZilla在Windows和Ubuntu之间传文件2.5编程示例&#xff1a;Ub…

迎接“云+AI”智算时代!生态案例分论坛议程一览 | 2024 龙蜥大会

2024 龙蜥操作系统大会由中国计算机学会开源发展委员会、中关村科学城委员会、海淀区委网信办、中国开源软件推进联盟指导&#xff0c;龙蜥社区主办&#xff0c;阿里云、中兴通讯、Intel、浪潮信息、Arm、中科方德等 24 家理事单位共同承办&#xff0c;主题为“进化重构赴未来”…

海南云亿商务咨询有限公司助力抖音商家破浪前行

在当下这个短视频与直播电商风起云涌的时代&#xff0c;抖音作为头部平台&#xff0c;正以其庞大的用户基数和强大的算法推荐机制&#xff0c;成为众多品牌与商家竞相追逐的新蓝海。而在这片波澜壮阔的海洋中&#xff0c;海南云亿商务咨询有限公司如同一艘稳健的航船&#xff0…

软件测试 —— JMeter 参数化4种方式!

一、JMeter参数化简介 1.JMeter参数化的概念 当使用JMeter进行测试时&#xff0c;测试数据的准备是一项重要的工作。若要求每次迭代的数据不一样时&#xff0c;则需进行参数化&#xff0c;然后从参数化的文件中来读取测试数据。 参数化&#xff1a;是自动化测试脚本的一种常…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间&#xff0c;因为项目的prettier的配置和eslint格式检查有些冲突&#xff0c;在其prettier官网和百度了一些配置相关的资料&#xff0c;在此做一些总结&#xff0c;以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具&#xff0c;支持ja…