使用 Flask 和 WTForms 构建一个用户注册表单

devtools/2024/11/15 2:01:09/

在这篇技术博客中,我们将使用 Flask 和 WTForms 库来构建一个用户注册表单。我们将创建一个简单的 Flask 应用,并使用 WTForms 定义一个注册表单,包括用户名、密码、确认密码、邮箱、性别、城市和爱好等字段。我们还将为表单添加验证规则,以确保用户输入的数据符合要求。

1. 安装 Flask 和 WTForms

首先,确保已经安装了 Flask 和 WTForms。如果没有安装,可以使用以下命令进行安装:

pip install Flask
pip install WTForms

2. 创建 Flask 应用

创建一个名为 app.py 的文件,并在其中编写以下代码:

from flask import Flask, render_template, request, redirect
from wtforms import Form
from wtforms.fields import core, simple, html5
from wtforms import validators
from wtforms import widgetsapp = Flask(__name__, template_folder='templates')
app.debug = True

3. 定义注册表单

接下来,我们将定义一个名为 RegisterForm 的表单类,该类继承自 wtforms.Form。在这个类中,我们将定义各种字段和验证规则。

from flask import Flask, render_template, request, redirect
from wtforms import Form
from wtforms.fields import core, simple, html5
from wtforms import validators
from wtforms import widgetsapp = Flask(__name__, template_folder='templates')
app.debug = Trueclass RegisterForm(Form):name = simple.StringField(label='用户名',validators=[validators.DataRequired()],widget=widgets.TextInput(),render_kw={'class': 'form-control'},default='GuHanZhe'                         # 页面输入框默认值)pwd = simple.PasswordField(label='密码',validators=[validators.DataRequired(message='密码不能为空')],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})pwd_confirm = simple.PasswordField(label='确认密码',validators=[validators.DataRequired(message='确认密码不能为空'),validators.EqualTo('pwd', message='两次密码输入不一致')    # EqualTo作用是比较当前字段和指定字段名的字段值是否相等],widget=widgets.PasswordInput(),render_kw={'class': 'form-control'})email = html5.EmailField(label='邮箱',validators=[validators.DataRequired(message='邮箱不能为空'),validators.Email(message='邮箱格式有误')],widget=widgets.TextInput(input_type='email'),render_kw={'class': 'form-control'})gender = core.RadioField(label='性别',choices=((1, '男'),(2, '女'),),coerce=int)city = core.SelectField(label='城市',choices=(('bj', '北京'),('sh', '上海')))hobby = core.SelectMultipleField(label='爱好',choices=((1, '篮球'),(2, '足球')),coerce=int)favor = core.SelectMultipleField(label='爱好',choices=((1, '篮球'),(2, '足球')),widget=widgets.ListWidget(prefix_label=False),option_widget=widgets.CheckboxInput(),coerce=int,default=[1, 2])def __int__(self, *args, **kwargs):super(RegisterForm, self).__init__(*args, **kwargs)self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球'))def validate_pwd_confirm(self, field):"""自定义pwd_confirm字段规则,例:与pwd字段是否一致"""# 最开始初始化时,self.data中已有所有值if field.data != self.data['pwd']:# raise validators.ValidationError('密码不一致')   # 继续后续字段的验证raise validators.StopValidation('密码不一致')      # 不再继续后续字段的验证@app.route('/register', methods=['GET', 'POST'])
def register():if request.method == 'GET':form = RegisterForm(data={'gender': 1})return render_template('register.html', form=form)form = RegisterForm(formdata=request.form)if form.validate():print('用户提交数据通过格式验证,提交的值为:', form.data)else:print(form.errors)return render_template('register.html', form=form)if __name__ == '__main__':app.run()

4. 编写注册路由

现在,我们需要编写一个注册路由,该路由将处理用户的注册请求。当用户访问 /register 时,我们将渲染注册表单。当用户提交表单时,我们将验证表单数据,并在验证通过后打印提交的数据。

@app.route('/register', methods=['GET', 'POST'])
def register():if request.method == 'GET':form = RegisterForm(data={'gender': 1})return render_template('register.html', form=form)form = RegisterForm(formdata=request.form)if form.validate():print('用户提交数据通过格式验证,提交的值为:', form.data)else:print(form.errors)return render_template('register.html', form=form)

5. 创建注册表单模板

最后,我们需要创建一个名为 register.html 的模板文件,该文件将包含注册表单的 HTML 代码。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>注册表单</title>
</head>
<body><h1>用户注册</h1><form action="/register" method="post"><!-- ... 省略表单字段 ... --><input type="submit" value="提交"></form>
</body>
</html>

6. 运行 Flask 应用

最后,我们需要在 app.py 文件中添加以下代码来运行 Flask 应用:

if __name__ == '__main__':app.run()

现在,你可以运行 app.py 文件,并在浏览器中访问 http://127.0.0.1:5000/register 来查看注册表单。当用户提交表单时,你将在控制台中看到提交的数据和验证结果。

这就是使用 Flask 和 WTForms 构建一个用户注册表单的过程。你可以根据自己的需求对表单进行进一步的定制和扩展。

civilpy:Python数据分析及可视化实例目录944 赞同 · 36 评论文章​编辑


http://www.ppmy.cn/devtools/17420.html

相关文章

Stable Diffusion v3.0 api使用教程

Stable Diffusion v3.0 api使用教程 文章目录 Stable Diffusion v3.0 api使用教程第一步, 注册API Key第二步, 运行代码 今天Stable Diffusion v3.0的api终于可以使用, 效果真的出奇的好. 我这里测试了下给予Python环境的调用, 效果也是非常的好. 第一步, 注册API Key 如果想…

【Win】怎么下载m3u8视频\怎么通过F12开发人员工具获取视频地址\怎么下载完整的.ts格式视频

怎么下载m3u8视频&#xff1f;首先通过浏览器本地的开发人员工具&#xff0c;获取m3u8的地址&#xff0c;然后再通过第三方下载工具下载&#xff0c;此处以N_m3u8DL-CLI_v3.0.2为例 如下图的步骤&#xff0c;即可获取到视频的m3u8地址 打开N_m3u8DL-CLI_v3.0.2&#xff0c;粘贴…

新手Pytorch入门笔记-概念入门

文章目录 1.主干权重和模型权重2.超参数2.1 ReLU(inplaceTrue)2.2 交叉熵损失CrossEntropyLoss 3.反向传播4.优化器4.1 optimizer.zero_grad()5.卷积6.Batch Normalization7.U-Net结构 这章节比较枯燥&#xff0c;都是大段文字 1.主干权重和模型权重 主干权重&#xff08;Back…

ChatGPT全方位指导:学术论文写作从零开始,轻松搞定高质量论文!

目录 文末福利 一、论文选题的深度探讨 二、撰写摘要的艺术 三、关键词的精选 四、引言的构建 五、正文的结构设计 六、撰写结论的策略 七、致谢的编写 八、附录的有效利用 九、参考文献的整理 文末有福利哦 撰写一篇高质量的学术论文是一项既复杂又耗时的任务。这个…

潜藏10年的恶意软件被发现;利用漏洞在K8S上挖矿;AWS、Google和Azure 出现信息泄露危机 | 安全周报0419

关键词&#xff1a;OfflRouter、恶意软件、VBA宏病毒、机密文件、可执行文件、iOS间谍软件、LightSpy、F_Warehouse、Azure CLI、AWS CLI、Google Cloud CLI 1. 近十年来&#xff0c;OfflRouter恶意软件在乌克兰一直未被发现 自2015年以来&#xff0c;部分乌克兰政府网络一直…

【机器学习】Q-Learning算法:在序列决策问题中的实践与探索

在序列决策问题中的实践与探索 一、Q-Learning算法概述二、Q-Learning算法实例分析三、Q-Learning算法代码实现四、总结与展望 在人工智能领域&#xff0c;序列决策问题一直是一个核心挑战。面对复杂的环境和动态变化的状态&#xff0c;智能体如何做出最优决策&#xff0c;以达…

Python使用numpy常见报错及解决方案

引言 NumPy&#xff08;Numerical Python的简称&#xff09;是Python中一个重要的数值计算扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。然而&#xff0c;在使用NumPy时&#xff0c;由于数据类型不匹配、数组维度…

快速部署stable diffusion@Ubuntu

Stable Diffusion可以根据文本描述生成相关的图像&#xff0c;是当前最热门的文生图模型。 在Ubuntu下&#xff0c;可以选择快速安装&#xff0c;或者手动一步步安装。 快速安装 使用文档中的方法&#xff0c;先下载一个sh文件&#xff0c;然后执行这个文件&#xff0c;就自动…