当前位置: 首页 > news >正文

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

文章目录

    • 概要
    • 中间件
      • 中间件 ---> '钩子'
      • 实现中间件
      • 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_infoprint('path :',path_url)if not re.match('^/test',path_url): # 正则表达式匹配 /test  开头的网址return# 计数  每个都要计算   最好是内存数据库  例如redis  后面学times = self.visit_times.get(ip_adress,0) # 没有 设置0print('ip',ip_adress,'已经访问',times)self.visit_times[ip_adress] = times + 1if times < 5:returnreturn 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 definedprint(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('上传文件成功!')

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于windows10的WSL详细安装与使用教程
  • nginx部署vue前端打包项目
  • 上位机图像处理和嵌入式模块部署(linux Qt程序的编译)
  • 艺术与科技的结合:推荐7款好用的AI绘图工具
  • Matplotlib 简介:Python 数据可视化的强大工具
  • 第八季完美童模全球偶像明星【Forrest lin】荣耀加冕 见证星芒风采!
  • 帆软报表,达梦数据库驱动上传失败
  • HCIA云计算实验-2-网络基础实验
  • Springboot 图片
  • vue3之仪表盘
  • 堆排序的插入和删除
  • 一文读懂推荐系统
  • vue3使用elementui-plus时使用深度选择器穿透影响原样式
  • keepalived详解
  • Spring Mybatis拦截器配合logback打印完整sql语句
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 30天自制操作系统-2
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • ES6--对象的扩展
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode18.四数之和 JavaScript
  • PHP面试之三:MySQL数据库
  • python大佬养成计划----difflib模块
  • python学习笔记 - ThreadLocal
  • react 代码优化(一) ——事件处理
  • spring学习第二天
  • Unix命令
  • vue2.0项目引入element-ui
  • 精彩代码 vue.js
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 普通函数和构造函数的区别
  • 日剧·日综资源集合(建议收藏)
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 延迟脚本的方式
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​configparser --- 配置文件解析器​
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #NOIP 2014#Day.2 T3 解方程
  • $GOPATH/go.mod exists but should not goland
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)无线电失控保护(二)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)计算机毕业设计大学生兼职系统
  • (七)理解angular中的module和injector,即依赖注入
  • (算法)大数的进制转换
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • . NET自动找可写目录
  • .NET 命令行参数包含应用程序路径吗?