发送邮件和随机码的生成

news2024/11/23 3:45:19

类视图和方法视图区别:

  • 不需要装饰器,只需要继承MethodView,需要使用什么方式就写对应的方法名称,它就能自动匹配

    @app.route("/delete/",methods=["DELETE"])这些就不用写了

    但是不写装饰器并不意味着不写路由了,要在最底下编写路由

  • 方法视图要写四个接口,而类视图只需要写一个接口

class ManageApi(MethodView):
  def get(self):#self关键字 作用是类内部共享公共资源属性和方法的调用
    #设置个条件:根据用户主键id进行查询

    #接收参数
    useerid = request.args.get("id",None)
    _sql=text("select `email`,`password` from `user` where `id`={}".format(useerid))
    print(_sql)
    user = db.session.execute(_sql).fetchone()
    print(user)
    if user:
      return jsonify({"errcode":0,"data":{"email": user[0], "password": user[1]}})
      # return jsonify({"errcode":0,"data":dict(user)})
    else:
      return jsonify({"errcode":1,"msg":"用户不存在"})
  

#匹配路由
app.add_url_rule("/",view_func=ManageApi.as_view("ManageApi"))

命令行显示:

查询数据库成功

 

测试文件运行结果:

(测试文件作为客户端接收到了来自后端项目入口文件的反馈)

验证用户合法性:

如果是方法视图的话就需要每个方法使用之前调用验证合法性的函数,麻烦

可以使用类的继承,新建BaseApi类,它继承的是来自flask框架中的MethodView类,在该类中定义了验证用户合法性的函数。然后新建ManageApi新类,它继承BaseApi类,该类中定义了处理Http请求的方法。

#父类 基础类(增删改查之前验证用户合法性)
class BaseApi(MethodView):
  def get_user(self):#只要有人需要该方法,不需调用,仅仅需要继承
    print("该用户合法")



#类视图,接口
class ManageApi(BaseApi):
  def get(self):#self关键字 作用是类内部共享公共资源属性和方法的调用
    #设置个条件:根据用户主键id进行查询

    #调用父类的实例方法
    self.get_user()


    #接收参数
    useerid = request.args.get("id",None)
    ......



 

用户注册功能中检测邮箱是否已经注册过:

 入库之后触发唯一索引,节省查询操作

右键点击user,为email添加唯一索引,然后运行,就会显示添加成功
添加唯一索引之后,注册中用户写入数据库的邮箱,在进行连接之前数据库会先检测是否与数据库中已有的邮箱重复,如果重复,拒绝连接。


注册流程图 draw.io


 

在“查询”中向user表中插入已经存在的值email字段的值和password字段的值

因为已经为email字段添加了唯一索引,所以当该条记录要插入字段中已经有的’3次邮箱‘值时,是会报错的,而password字段已经有了'3次数密码',但是其并没有设置唯一索引,单独作为一条插入记录是能插入进去的。但是由于email的唯一性约束使得整条记录插入失败。


 

 发送邮件:
邮件发送类(两个方法)

初始化方法:定义发送者邮箱,发送者密钥

发送方法:
构建邮件体:mimemultipart(),标题,发送者,接收者
邮件内容:mimetext()
建立连接对象:s=smtplib.SMTP_SSL('smtp.qq.com',465)

登陆邮箱:s.login(self._user,self._pwd)

发送邮件

关闭连接
 

#工具库,保存系统中所有用到的工具
#导包
import smtplib

#导入文件文本包
from email.mime.text import MIMEText

#导入邮件分类库
from email.mime.multipart import MIMEMultipart

#邮件发送类
class SendEmail: #此不需要继承

  #初始化方法
  def __init__(self):

    #初始化邮箱数据

    #发送者的邮箱
    self._user='3052864873@qq.com'

    #发送密钥 授权码
    self._pwd = 'ylanafhvjjckdddc'
  
  #发送方法
  def send_mail(self,_touser,_title,_cotent):#往哪发,发送标题,具体内容

    #构建邮件体
    msg=MIMEMultipart()

    #邮件标题
    msg["Subject"] = _title

    #发件人
    msg["From"] = self._user#通过self关键字来获取初始化方法里的_user

    #收件人
    msg["To"] = _touser

    #邮件内容
    part = MIMEText("这是社交平台一封测试邮件","html","utf-8")

    msg.attach(part)

    #发送逻辑

    #建立链接对象(域名,端口号)
    s=smtplib.SMTP_SSL('smtp.qq.com',465)#http端口号是80,https端口号是443,smtp端口号是465

    #登录邮箱
    s.login(self._user,self._pwd)

    #发送邮件
    s.sendmail(self._user,_touser,msg.as_string())

    #关闭链接
    # s.quit()
    s.close()

if __name__ == '__main__':#测试一律main入口,main入口只是在本地调用起作用,别人导入不会起执行。若是不写,别人导入之后立刻执行
  #实例化对象
  sm = SendEmail()
  #发送
  sm.send_mail('3451542714@qq.com','社交平台邮件标题','123456')#假设给自己发








 


生成随机码:

import random

#随机码
def create_code(abc=True,length=4):#abc为true为字符串加数字,false为纯数字
  if abc:
    base_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  else:
    base_str = "0123456789"

    #生成逻辑
    # code=""
    # for _ in range(length):
    #   mystr = random.choice(base_str)
    #   code+= mystr
  return "".join([random.choice(base_str)for _ in range(length)] )#_意味着什么也没有,节约内存空间


if __name__ == '__main__':#测试一律main入口,main入口只是在本地调用起作用,别人导入不会起执行。若是不写,别人导入之后立刻执行
  #实例化对象
  # sm = SendEmail()
  #发送
  # sm.send_mail('3451542714@qq.com','社交平台邮件标题','123456')#假设给自己发
  print(create_code())#测试随机码生成

 

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

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

相关文章

高效美发店运营:SpringBoot管理系统详解

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

k8s部署学习

8s的架构 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点上都会安装不同的组件 1 master:集群的控制平面,负责集群的决策 ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、…

MediaPlayer视频播放流程

MediaPlayer视频播放流程(基于Android8.0) 1. MediaPlayer源码分析 1.0 public class MediaPlayer extends PlayerBase implements SubtitleController.Listener, VolumeAutomation, AudioRoutingMediaPayer继承自PlayerBase类,分别实现了SubtitleController Volume…

运筹说 第126期 | 存储论经典例题讲解——随机存储模型

通过上一期,我们已经学习了确定型存储论模型在经济管理中的应用,但其忽略了现实中的随机性和不确定性因素,本期小编选择了一些考虑不确定因素的随机存储模型的典型例题,进行详细讲解。 单周期的随机型存储模型 单周期的随机型存储…

基于springboot模式花店网站的设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

《Linux从小白到高手》进阶实操篇:详解Linux系统调优之服务器硬件优化

List item 本篇介绍Linux服务器硬件调优。硬件调优主要包括CPU、内存、磁盘、网络等关键硬件组。 1. CPU优化 选择适合的CPU: –根据应用需求选择多核、高频的CPU,以满足高并发和计算密集型任务的需求。CPU缓存优化: –确保CPU缓存&#x…

【onnx模型转kmodel】记录和踩坑——nncase-v1.9使用

最近几天一直在找相关资料,坑太多,也可能我菜的成分更多一点吧!记录下来,以观后用; 背景 我手里有一个正点原子的K210的开发板; 刚刚安装了wsl2下的ubuntu22.04 我手里有正点原子的源码,但是…

【Redis入门到精通十一】Redis集群

目录 集群 1.三种分片算法 1.哈希求余算法 2.一致性哈希算法 3.哈希槽分区算法 2.搭建集群环境 3.集群故障处理 4.集群扩容 集群 上篇文章我们了解Redis哨兵的相关操作,使用哨兵只是解决了主节点瘫痪,从节点不能自动变为主节点的问题,…

[ComfyUI]太赞了!阿里妈妈发布升级版 Flux 图像修复模型,更强细节生成,更高融合度以及更大分辨率支持

小伙伴们还记得我们之前介绍的阿里妈妈发布的 Flux 的 ControlNet 图像修复模型不,之前发布的是 Alpha 早期测试版本,说实话和 Flux 原生的重绘其实差距不大,有些方面甚至还是原生的效果更好。 但是现在,Alpha 的升级版本 Beta 版…

基于java的零食销售系统(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

qt小练习

制作简易闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QDebug> //信息调试类 #include <QMessageBox> //消息对话框类 #include <QTime> //时间类 #include…

【C语言复习】常见概念(零基础)

【C语言复习】常见概念 1、C语言是什么&#xff1f;2、C语言的历史和辉煌3、 编译器的选择VS20223.1编译和链接3.2编译器的对比3.3 VS2022 的优缺点 4、VS项⽬ 和 源⽂件、头⽂件介绍5、第一个C语言程序6、main函数&#xff08;主函数&#xff09;7、printf和库函数8、关键字介…

基于springboot的大学生体质测试管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的大学生体质测试管理系统1拥有三种角色 管理员&#xff1a;学生管理、教师管理、日常运行管理、运动分析管理、成绩管理、论坛管理、轮播图管理等 教师&#xff1a;登录…

如何在RuoYi-Vue项目中去除`/dev-api`前缀

前言 在使用RuoYi-Vue框架进行Web应用开发时&#xff0c;有时会遇到API路径需要特定前缀的问题。例如&#xff0c;在某些情况下&#xff0c;开发者可能希望移除或更改默认的/dev-api前缀。 问题描述 当使用YApi直接请求后台接口时&#xff0c;无需添加/dev-api前缀。在生成和…

C++第十六节课 万字详细手动实现string类!

std::basic_string std::basic_string 是 C 标准库中定义的一个模板类&#xff0c;它用于表示字符串。C 中的 std::string 实际上是 std::basic_string<char> 的一个特化版本。也就是说&#xff0c;std::string 是 std::basic_string 这个模板类的一个具体实现&#xff0…

DAY29|| 93.复原ip地址 |78.子集 |90.子集Ⅱ

93.复原ip地址 题目&#xff1a;93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.…

国外电商系统开发-运维系统上传脚本

创建脚本的方式有两种&#xff1a;第一种脚本文件&#xff0c;第二种在线写脚本。并且友好的支持中文的显示和脚本的中文名。 第一种是从您的PC电脑上传一个脚本文件&#xff0c;当然了&#xff0c;还是以老用法&#xff0c;直接拖动就行&#xff1a; 第二种上传方式&#xff0…

『网络游戏』服务器日志工具类优化【18】

创建脚本&#xff1a;PECommon.cs 编写脚本&#xff1a;PECommon.cs 修改脚本&#xff1a;LoginSys 替换 替换完成 修改客户端脚本&#xff1a;ResSvc.cs 本章结束

仓储物流行业--仓储服务升级经典案例

在当今内外贸竞争激烈的仓储物流行业&#xff0c;高效的数据处理和管理是企业提升竞争力的关键。杭州某供应链公司作为一家专注为中小卖家提供定制仓储服务方案的第三方云仓&#xff0c;在业务发展过程中面临着数据处理方面的诸多挑战。本文将详细介绍云仓项目如何通过轻易云数…

上海交通大学震撼发布:首个OpenAI O1项目复现报告,揭秘独家经验!

来源 | 机器之心 团队介绍&#xff1a;本项目的核心开发团队主要由上海交通大学 GAIR 研究组的本科三年级、四年级学生以及直博一年级研究生组成。项目得到了来自 NYU 等一线大型语言模型领域顶尖研究科学家的指导。 详细作者介绍见&#xff1a;https://github.com/GAIR-NLP/…