后端注册表单验证器实现

news2024/12/29 16:28:47

视图函数在去注册用户之前需要进行验证,表单验证需要先下载 flask-wtf

在终端执行:

pip install flask-wtf

新建forms.py

import wtforms
from wtforms.validators import Email,Length,EqualTo
from models import UserModel,EmailCaptchaModel



# Form:主要就是用来验证前端返回的数据是否符合要求
class RegisterForm(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.StringField(validators=[Length(min=6, max=20, message="密码格式错误!")])
    password_confirm = wtforms.StringField(validators=[EqualTo("password", message="两次密码不一致")])

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

    # 2.验证码是否正确
    def validate_captcha(self,field):
        captcha = field.data
        email = self.email.data
        captcha_model = EmailCaptchaModel.query.filter_by(email=email,captcha=captcha).first()
        if not captcha_model:
            raise wtforms.ValidationError(message="邮箱或验证码错误!")

auth.py 代码

注意:
route要加methods参数,不然会报错

request.form 可以拿到前端提交上来的数据

在给数据库增加数据的时候需要给密码加密,防止密码泄露!!
password=generate_password_hash(password)

两种页面跳转方式:
1. return redirect(url_for(“auth.login”))
2. return redirect(“/auth/register1”)

#coding=utf-8
from flask import Blueprint,render_template,jsonify,redirect,url_for
from exts import mail,db
from flask_mail import Message
from flask import request
import string
import random
from models import EmailCaptchaModel,UserModel
from .forms import RegisterForm
from werkzeug.security import generate_password_hash

bp = Blueprint("auth",__name__,url_prefix="/auth")

@bp.route("/register1",methods=['GET', 'POST'])
def regeister():
    if request.method == 'GET':
        return render_template("register.html")
    
    # 使用requst.form拿到前端提交上来的数据
    else:
        form = RegisterForm(request.form)

        # form.calidate() 方法可以自动的调用表单中的验证器
        if form.validate():
            email = form.email.data
            username = form.username.data
            password = form.password.data
            user = UserModel(email=email,username=username,password=generate_password_hash(password))
            db.session.add(user)
            db.session.commit()
            return redirect(url_for("auth.login"))
        else:
            print(form.errors)
            return redirect("/auth/register1")

检查数据库user用户数据是否提添加成功

在这里插入图片描述

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

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

相关文章

详细的步骤在VirtualBox 上安装 CentOS 7

下面是详细的步骤来安装 CentOS 7 在 VirtualBox 上: 下载 CentOS 7 ISO 镜像文件: 前往 CentOS 官方网站的镜像下载页面:Download在页面上找到适合你系统架构的 CentOS 7 ISO 镜像文件,并下载到本地。 安装 VirtualBox&#x…

为什么大部分企业都选择加密软件来防止数据泄露?

加密软件是使用加密算法对数据或信息进行编码转换的软件,目的是防止未授权访问与保护敏感内容。它是实现加密技术的重要手段,为用户提供了简单易用的加解密功能,无需深入了解复杂的数学原理。 加密软件使用的加密算法通常采用对称与非对称算法…

16 KVM虚拟机配置-其他常见配置项

文章目录 16 KVM虚拟机配置-其他常见配置项16.1 概述16.2 元素介绍16.3 配置示例 16 KVM虚拟机配置-其他常见配置项 16.1 概述 除系统资源和虚拟设备外,XML配置文件还需要配置一些其他元素,本节介绍这些元素的配置方法。 16.2 元素介绍 iothreads&…

干货丨手把手教会群晖Mailplus设置及邮件免拒收(SPF、DMARC、DKIM)

开篇之前,我想说通过群晖 Mailplus Server 自建一个邮件服务器绝对是一个非常有成就感的事情,搭建 过程中我们可以学习到邮件服务使用的协议,端口号,MX解析等很多知识。如果你已经准备好,那就让 我们开始吧。 前期准备…

前端013_标签模块_新增功能

标签模块_新增功能 1、需求分析2、新增窗口实现3、列表引用新增组件4、关闭弹出窗口5、校验表单数据6、提交表单数据6.1 EasyMock 添加新增模拟接口6.2、Api 调用接口1、需求分析 点击 新增 按钮后,对话框形式弹出新增窗口输入类别信息后,点击 确定 提交表单数据; 2、新增窗…

DARWIN Survival of the Fittest Fuzzing Mutators读论文笔记

DARWIN: Survival of the Fittest Fuzzing Mutators 作者背景 达姆施塔特工业大学:成立于1877年,是德国著名理工科大学 ‡萨格勒布大学: 是克罗地亚最大的大学,也是该地区历史最悠久的大学 拉德堡德大学:位于荷兰奈梅亨市,又称奈梅…

Redis与SpringBoot的集成:自定义RedisTemplate类,创建一个工具类:可以帮助我们更好的使用redis中的API

这里使用的环境是在windows环境下,也可以放在服务器中,只要知道端口号和ip即可,如果有不知道怎么部署环境的可以看这篇文章去在Windows环境下去部署redis环境redis之jedis:通过redis的API与Java的集成_不想睡醒的梦的博客-CSDN博客…

css的clip-path学习

文章目录 clip-path的几个值polygon多边形circle圆形ellipse椭圆形inset 矩形round后面是四个角的度数 一个简单的应用,比如画一段曲线 参考博文 clip-path的几个值 自己学习后,先把clip-path理解为在原图上绘制轮廓,显示的内容是轮廓内的内…

2023苹果商务管理模式分发app完全指南

随着苹果对企业级开发证书的管控越来越严格,越来越多的企业级证书到期后,苹果不再予以续约,但是很多app都有企业内部分发需求,不希望自己的应用被公开上架。这时候,我们可以参考苹果官方的建议,使用商务管理…

繁华三千如梦散,红尘俗世要释怀

岁月的折痕在眼角盛开,一深,一浅,交错着旧时光的梦。 梦里是累积的回忆,厚厚的凌乱一地。 那些,都是悄悄溜走的充满烟火气的日子。 生活像是流水账一般,就这样过了,一天又一天,一年…

ConcurrentHashMap进阶面试题

ConcurrentHashMap 1.8的优化 存储的时候的优化写数据的时候加锁的优化扩容时的优化,有一个协助扩容的概念计数器的优化,在记录元素个数时,使用的类似与longAdder的形式,不会过度消耗CPU资源 为什么多线程情况下longAdder会比ato…

人体工学椅真的很舒服

前言 人体工学椅是现代办公室中必不可少的家具之一。作为一款专门设计为舒适、健康和高效的椅子,它为人们提供了更好的工作和学习体验。 人体工学椅的设计理念是以人体工程学为基础,根据人体骨骼生理学、生物力学和心理学等多个角度进行科学的设计。它…

公路工程公路bim数据与GIS数据融合应用

摘要: BIM技术因其自身的协同性、可模拟性以及可视化优势,能够补足传统项目管理存在的短板,成为新一代项目管理模式。本文将运用BIM技术打造一体化管理平台,达到项目管理的智能化管理水平,实现更易维、更安全、更节能…

谈一谈数据库设计原则

到开发的时候才发现,原来后端不是最难的,最难得是数据库的设计,往往有时候开发新模块的时候才发现,之前数据库设计的一些问题,今天就来简单谈谈数据库设计方面的一些原则。 数据库范式 ​ 通过将数据结构分解成小的部…

第五十四章 Unity 移动平台输入(下)

本章节我们介绍一个模拟器插件。这种插件比较多,比如EasyTouch,Lean Touch,Joystick Pack等等。EasyTouch是一个使用非常广泛的插件,支持点击,拖拽,遥感等很多常用功能。不过遗憾的是,该插件已经…

[JAVA]直接插入排序

插入排序就像玩扑克牌一样,把元素按照大小插入到一个已经排好序的序列中,直到全部元素排好。 假设我们拿到了一个数组,请问我们该从哪一个元素开始着手于直接插入排序呢? 答案是:第二个元素 我们可以假设,第…

微服务测试如何测试?

本文将讨论微服务测试的重要性、挑战和最佳实践。 微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中,大型应用程序被分成较小的、独立的服务,这些服务通过网络相互通信。微服务测试是确保这些服务无缝协同工作的关键步骤。本文将…

《微服务实战》 第五章 Spring Cloud Netflix 之 Ribbon

前言 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具,其主要功能是提供客户端的负载均衡算法和服务调用。 1、负载均衡 负载均衡(Load Balance) ,简单点说就是将用户的请求平摊分配到多个…

【论文阅读19】GloVe: Global Vectors for Word Representation

论文十问十答: Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提到的解决方…

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN

Packet Tracer - 使用 CLI 配置并验证站点间 IPsec VPN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/0 192.168.1.1 255.255.255.0 不适用 S1 F0/1 S0/0/0 (DCE) 10.1.1.2 255.255.255.252 不适用 不适用 R2 G0/0 192.168.2.1 255.…