python+flask后端开发~项目实战 | 博客问答项目--用户(UserModel)、验证码(EmailCaptchaModel)两个数据库模型实现注册功能底层数据架构搭建
本文介绍了基于Flask框架的博客系统开发中两个核心数据库模型的搭建与功能实现,包括:1) 通过exts.py配置SQLAlchemy和Mail扩展插件;2) 在config.py中设置数据库连接和邮件服务器参数;3) 创建UserModel和EmailCaptchaModel两个ORM模型,分别用于用户信息管理和邮箱验证码存储;4) 前端注册页面通过AJAX请求获取验证码,后端实现验证码生成与邮
项目功能概述:
- 首页(公开博客显示)
- 博客发布与查询
- 用户登录与注册
- 底层MySQL数据库的动态响应与支持
简介:本文主要带大家初步完成两个数据库ORM模型的搭建,并于后期具体针对用户信息注册以及验证码发送两个功能场景进行使用。UseerModel
是用户信息ORM模型,EmailCaptchaModel
是验证码信息存储的ORM模型。(关于ORM模型,大家可以访问我之前的一篇文章:python+flask后端开发~进阶系列 | Flask-migrate插件:实现ORM模型的迁移)。
目录:
一、扩展与配置 (exts.py与config.py文件的写入)
1.1 扩展文件写入(exts.py)
1.2 配置文件写入 (config.py)
二、模型搭建 (model.py文件写入)
2.1 用户模型 UserModel 的搭建
2.2 邮箱验证码模型 EmailCaptchaModel 的搭建
三、模板网页的配置
3.1 注册网页的渲染 (register.js的写入)
3.2 路由配置 (视图函数绑定 (blueprints/author.py的写入))
四、结束语
一、扩展与配置 (exts.py与config.py文件的写入)
1.1 扩展文件写入(exts.py)
在exts.py
文件中输入以下代码,这里主要用于外界引入SQLAlchemy
包和flask自带的Mail
包,用于数据库增删改查以及默认邮件验证码的发送。
关于使用SQLAlchemy包进行数据库增删改查操作的更多细节可以访问我之前发布的一篇文章:python+flask后端开发~进阶系列 | Flask后端ORM模型执行数据库的增、删、改、查(CRUD)操作
# 扩展插件
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
DB = SQLAlchemy()
mail = Mail()
1.2 配置文件写入 (config.py)
在config.py
中进行数据库信息与邮箱服务器信息的配置,输入以下代码并进行关键信息修正即可使用。
SECRET_KEY = "asdasdasd"
# 数据库的配置信息
# MySQL 所在的主机名
HOSTNAME = "127.0.0.1"
# MYSQL 监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,读者用自己设置的
USERNAME = "root"
# 连接 MYSQL的密码,读者用自己的
PASSWORD = "****"
# MYSQL上创建的数据库名称
DATABASE = "blog_back"
DB_URI= f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
SQLALCHEMY_DATABASE_URI = DB_URI
# 邮箱配置
MAIL_SERVER = "smtp.163.com"
MAIL_USE_SSL = True
MAIL_PORT = 465
MAIL_USERNAME ="****"# 用户开启smtp协议的邮箱账号,也就是邮箱服务器的账号
MAIL_PASSWORD="####"# 开始SMTP服务生成的授权码
MAIL_DEFAULT_SENDER ="*****"# 与前面的MAIL_USERNAME一致。
二、模型搭建 (model.py文件写入)
2.1 用户模型 UserModel 的搭建
from exts import DB
from datetime import datetime
class UserModel(DB.Model):
# 创建一个表,名为user,可自定义
__tablename__ = "user"
# 添加主键字段,并定义了类型、主键、自增
id = DB.Column(DB.Integer, primary_key=True, autoincrement=True)
# 添加字段,并指定字符长度,非空
username = DB.Column(DB.String(100), nullable=False)
password = DB.Column(DB.String(300), nullable=False)
email = DB.Column(DB.String(100), nullable=False, unique=True)
join_time = DB.Column(DB.DateTime, default=datetime.now)
2.2 邮箱验证码模型 EmailCaptchaModel 的搭建
class EmailCaptchaModel(DB.Model):
# 创建一个表,名为user,可自定义
__tablename__ = "email_captcha"
# 添加主键字段,并定义了类型、主键、自增
id = DB.Column(DB.Integer, primary_key=True, autoincrement=True)
# 添加字段,并指定字符长度,非空
email = DB.Column(DB.String(100), nullable=False)
captcha = DB.Column(DB.String(100), nullable=False)
三、模板网页的配置
3.1 注册网页的渲染 (register.js的写入)
在网页button标签上绑定以下js代码,用于实现邮箱验证码的获取与发送,这里访问了"/author/captcha/email?email=+email
"网址用于向后端服务器发送验证码获取请求,请求方法为GET。相关视图函数将在下一节中进行介绍。
// 网页加载完毕后执行
function bindEmailCaptchaClick() {
$("#captcha-btn").click(function (event) {
$this = $(this);
// 阻止默认事件
event.preventDefault();
var email = $("#exampleInputEmail1").val();
$.ajax({
url: "/author/captcha/email?email="+email,
methods: "GET",
success: function (result){
var code = result['code'];
if (code == 200){
var countdown = 5;
// 取消点击事件
$this.off("click");
var timer = setInterval(function () {
$this.text(countdown + "s");
countdown--;
if (countdown <= 0){
clearInterval(timer);
$this.text("获取验证码");
bindEmailCaptchaClick();
}
}, 1000);
alert("邮箱验证码发送成功");
}else{
alert(result['message']);
}
},
fail: function (erroe) {
console.log(error);
}
})
});
}
$(function (){
bindEmailCaptchaClick();
});
3.2 路由配置 (视图函数绑定 (blueprints/author.py的写入)
采用下列视图函数实现邮箱验证码的发送,这里需要引入前面我们搭建的EmailCaptchaModel模型。
@BPObj.route('/captcha/email')
def get_email_captcha():
email = request.args.get("email")
sourse = string.digits*4
captcha = "".join(random.sample(sourse, 4))
message = Message(subject="博客邮箱验证码", recipients=[email], body=f"您的验证码是{captcha}")
mail.send(message)
email_captcha = EmailCaptchaModel(email=email, captcha=captcha)
DB.session.add(email_captcha)
DB.session.commit()
return jsonify({"code":200, "message":"", "data":None})
四、结束语
通过上述代码块的写入,此时你可以通过在html网页中点击获取验证码,在输入的邮箱中看到你设定的邮箱服务器发来的验证码啦!文章只是对核心内容的一些介绍与解释,想要了解更多以及获取完整代码的,私信我即可哦!!!
最后,感谢你的阅读!如果你觉得本文对你有帮助,不妨点赞和关注,我会继续分享更多关于 Python 和 Flask 开发的实用知识。🚀
我的邮箱:yifanduan@stu.ncst.edu.cn.
关注专栏,每周更新,带你从“第一个 Flask 项目”一路进阶到“Docker 部署、JWT 鉴权、微服务拆分”。
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
更多推荐
所有评论(0)