项目准备(flask+pyhon+MachineLearning)- 2

server/2025/3/7 0:20:28/

目录

1. 注册页面的渲染

2.邮箱的注册验证

3.登录页面的渲染

1. 注册页面的渲染

使用render_template来渲染,注意这里的前端网页使用jinja2模板

详情大家可以参考jinja2介绍

注意每个网页上方都有导航条,大家可以使用jinja2的继承功能,写一个base.html,其他网页都可以继承这个网页,在其上面扩展

2.邮箱的注册验证

使用falsk-mail库完成

制作一个邮箱服务器,我们这里使用QQ邮箱

在config.py中完成配置即可

再创建一个邮箱的模板,进行数据库交互

验证前端输入的邮箱密码是否输入正确,增加一个forms.py

python">import wtforms
from wtforms.validators import Email, Length, EqualTo, InputRequiredfrom exts import db
from models import UserModel, EmailCaptchaModel# Form :主要验证用来验证前端提交的数据是否符合要求
class RegisterForm(wtforms.Form):email = wtforms.StringField(validators=[Email(message="邮箱格式错误!")])captcha = wtforms.StringField(validators=[Length(max=4, min=4, message="验证码格式错误")])username = wtforms.StringField(validators=[Length(min=3, max=20, message="用户格式错误")])password = wtforms.StringField(validators=[Length(min=6, max=20, message="密码格式错误")])password_confirm = wtforms.StringField(validators=[EqualTo("password", message="两次密码不一致")])# 自定义验证# 1、 邮箱是否被注册def validate_email(self, field):email = field.datauser = UserModel.query.filter_by(email=email).first()if user:raise wtforms.ValidationError(message="该邮箱已经被注册!")# 2、 验证码是否正确def validate_captcha(self, field):captcha = field.dataemail = self.email.datafilters = {'email': email, 'captcha': captcha}captcha_model = EmailCaptchaModel.query.filter_by(**filters).first()# print(email,captcha,captcha_model.email)if not captcha_model:raise wtforms.ValidationError(message="邮箱或者验证码错误")# tode 可以删除 captcha_modelelse:# 使用完毕可以删除 或者 定义是否使用  # False是0,true是1# db.session.delete(captcha_model)# db.session.commit()captcha_model.used = 1db.session.commit()class LoginForm(wtforms.Form):email = wtforms.StringField(validators=[Email(message="邮箱格式错误!")])password = wtforms.StringField(validators=[Length(min=6, max=20, message="密码格式错误")])class QuestionForm(wtforms.Form):title = wtforms.StringField(validators=[Length(max=100, min=4, message="标题格式错误")])content = wtforms.StringField(validators=[Length(min=6, message="内容格式错误")])class AnswerForm(wtforms.Form):content = wtforms.StringField(validators=[Length(min=4, message="内容格式错误")])question_id = wtforms.IntegerField(validators=[InputRequired(message="必须要传入问题id")])

获取从前端输入的邮箱密码

python"># GET :从服务获取数据
# POSt :将客户端的数据提交个服务器
@bp.route("/register", methods=["POST", "GET"])
def register():if request.method == "GET":if g is None:return redirect("/")log.info("Registering")return render_template("register.html")else:# Post 去请求# 验证用户提交邮箱和验证是否正确# 表单验证:flask-wtfform = RegisterForm(request.form)if form.validate():username = form.username.datapassword = form.password.dataemail = form.email.datauser = UserModel(email=email, username=username, password=generate_password_hash(password))db.session.add(user)db.session.commit()log.info(f"用户: {username}  邮箱地址: {password} 已经注册成功")return redirect(url_for("auth.login"))else:print(form.errors)log.info(f"用户注册验证不通过,即将返回注册页面")return redirect(url_for("auth.register"))

3.登录页面的渲染

python">@bp.route("/login", methods=["POST", "GET"])
def login():if request.method == "GET":if g is None:return redirect("/")return render_template("login.html")else:form = LoginForm(request.form)if form.validate():email = form.email.datapassword = form.password.datauser = UserModel.query.filter_by(email=email).first()if not user:return jsonify({'code': 200, 'message': '用户不存在'})if check_password_hash(user.password, password):# return jsonify({'code': 200, 'message': '用户登录成功'})# cookie  不适合存储太多数据,只适合存储少量的数据# seesionsession["user_id"] = user.idflash(f"用户:{user.username} 登录成功")return redirect("/")else:return redirect(url_for("auth.login"))else:log.error(form.errors)return redirect(url_for("auth.login"))


http://www.ppmy.cn/server/173008.html

相关文章

MySQL DBA技能指南

1. MySQL 安装与配置 安装和部署:掌握 MySQL 在不同操作系统上的安装方法(Linux、Windows、Docker 等)。配置管理:熟悉 MySQL 配置文件(my.cnf 或 my.ini)的设置与优化,了解常见的配置参数&…

为AI聊天工具添加一个知识系统 之136 详细设计之77 通用编程语言 之7

问题 Q1492、针对前面您给出的“AI聊天工具知识系统设计文档”,请就您后面所述“智能进化:认知演进路由驱动知识库持续优化”进行更深入的实现讨论 Q1493、感觉不够完整。下面我们针对您前面给出的“知识系统三层架构详述”逐层给出详细地实现方案。 …

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火,试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下,在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库,实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

历年哈尔滨工业大学计算机考研复试上机真题

历年哈尔滨工业大学计算机考研复试上机真题 2019哈尔滨工业大学计算机考研复试上机真题 2018哈尔滨工业大学计算机考研复试上机真题 在线评测:https://app2098.acapp.acwing.com.cn/ 百鸡问题 题目描述 用小于等于n元去买100只鸡,大鸡5元/只&#xf…

栈和队列的模拟实现

文章目录 一. 回顾栈和队列二. stack的模拟实现stack.hstack.cpp 三. queue的模拟实现queue.htest.cpp 四. 了解dequeuevector和list都有各自的缺陷deque 总结 一. 回顾栈和队列 回顾一下栈和队列 栈:stack:后进先出 _ 队列:queue&#xf…

如何在阿里云添加二级域名

添加解析记录 在解析设置页面,点击 “添加解析记录” 按钮,开始添加新的解析记录。 配置解析记录 记录类型 :选择你需要的解析记录类型,如 A 记录(将域名指向一个 IPv4 地址)、CNAME 记录(将域…

H5DS编辑器是如何让企业快速构建动态页面

H5DS编辑器核心亮点: 1.拖拽式操作,小白友好:无需设计与代码基础!通过简单拖拽元素、调整文字和动画,即可生成交互式H5页面。内置海量模板和素材库,支持自定义设计风格,轻松适配企业品牌需求。…

lamp平台介绍

一、lamp介绍 网站: 静态 动态 php语言 .php 作用:运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…