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

【flask-wtf】 表单验证器

一、安装库包

pip install flask-wtf

二、使用表单类创建验证器类

首先代码展示:

#从框架中引入原始类
import wtforms
from wtforms.validators import Email, Length, EqualTo
from models import UserModel
from exts import redis


class RegistrationForm(wtforms.Form):
    email = wtforms.StringField(validators=[Email(message="邮箱格式错误")])
    captcha = wtforms.StringField(validators=[Length(min=4,max=4,message="验证码格式错误")])
    username = wtforms.StringField(validators=[Length(min=3,max=20,message="用户名格式错误")])
    password = wtforms.PasswordField(validators=[Length(min=6, max=20, message="密码格式错误")])
    password_confirm = wtforms.PasswordField(validators=[EqualTo("password")])


    #自定义验证
    def validate_email(self, field):
        email = field.data
        user = UserModel.query.filter_by(email = email).first()
        if user:
            raise wtforms.ValidationError(message="该邮箱已被注册")


    def validate_captcha(self, field):
        captcha = field.data
        code = redis.get("mail:" + self.email.data).decode()
        if code!=captcha:
            raise wtforms.ValidationError(message="验证码不正确")

这里首先是需要继承原始类(wtforms.Form)来创建子类验证器类(RegistrationForm)。
然后通过表单域类型来创建相关的表单元素,这里附带了相关的验证方式。
在这里插入图片描述
可以用于验证表单填写数据正确与否的验证方法:
在这里插入图片描述
还可以通过自定义来创建验证方式:
validation_表单元素名:这里的表单元素名是前端给后端传递的元素名,需要匹配。
其中传入的self是子类验证器类的self对象,里面包含了所定义的数据,可以通过它来访问除了email之外的其他元素数据。

    #自定义验证
    def validate_email(self, field):
        email = field.data
        user = UserModel.query.filter_by(email = email).first()
        if user:
            raise wtforms.ValidationError(message="该邮箱已被注册")

三、验证器的使用

导入验证器类

from .form import RegistrationForm

使用验证器类去验证表单元素填写是否正确

#这里输入对象需要跟验证器类书里面的数据名一一对应,否则无法对应上
form = RegistrationForm(request.form)
#如果验证没有问题
if form.validate():
    # 1. 创建ORM对象
    user = UserModel(username=form.username.data, password=form.password.data, email=form.email.data, create_time=datetime.now());
    # 2. 将ORM对象添加到db.session中
    db.session.add(user);
    # 3. 将db.session中的改变同步到数据库中
    db.session.commit();
    return jsonify({"code":200,"message":"账号创建完成","data":None})
else:
    return form.errors

http://www.kler.cn/a/371698.html

相关文章:

  • 智慧用电监控装置:引领0.4kV安全用电新时代
  • 算法练习:209. 长度最小的子数组
  • 解决edge浏览器无法同步问题
  • 【云原生】云原生后端详解:架构与实践
  • (二十三)、k8s(minikube) 部署mysql
  • 论可以对抗ai编程的软件开发平台(直接把软件需求描述变成软件的抗ai开发平台)的设计
  • Spring Boot 集成 Shiro:会话管理、加密与登录次数限制
  • 以太网交换安全:DHCP Snooping
  • 闲话10.40 :)
  • Mac安装Ruby
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的体育馆管理系统的设计与实现
  • 华为应用市场增长优化(一)
  • 使用 Nginx 配置真实 IP 地址转发
  • 华为OD机试真题---狼羊过河
  • 【GO实战课(完结)】第九讲:电子商务网站(9):测试、调试和优化
  • 闲一品交易平台:SpringBoot技术的新境界
  • String的长度有限,而我对你的思念却无限延伸
  • “前端兼容——CSS篇”(进阶版)
  • 【LeetCode】两数之和、大数相加
  • 回溯算法习题其三-Java【力扣】【算法学习day.16】
  • Android——metaData
  • EJB项目如何升级SpringCloud
  • 二、ARMv8寄存器之系统寄存器
  • jjycheng字符签名
  • BGP路由优选
  • 【Python爬虫实战】网络爬虫完整指南:网络协议OSI模型