Flask-WTF扩展

本文介绍如何使用Flask-WTF扩展简化表单处理流程,并对比手动处理表单的方法。通过实例展示了表单验证及CSRF保护等关键特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不使用Flask-WTF扩展时,表单需要自己处理

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form method='post'>
        <input type="text" name="username" placeholder="Username">
        <input type="password" name="password" placeholder="Password">
        <input type="submit">
    </form>
</body>
</html>
# coding:utf-8

from flask import Flask, request, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)


@app.route('/register', methods=['GET', 'POST'])
def register():
    return render_template("register.html")


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

在这里插入图片描述

使用Flask-WTF扩展

安装依赖包

pip install Flask-WTF
# coding:utf-8

from flask import Flask, request, redirect, render_template, url_for, session
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo


app = Flask(__name__)

app.config['SECRET_KEY'] = '?/*[):;`*&%02#%@kds94dv165_-43='


# 定义表单的模型类
class RegisterForm(FlaskForm):
    """自定义的注册表单模型类"""
    # label:名字      validators:验证器
    # DataRequired:要求数据必须填写,不能为空
    user_name = StringField(label=u'用户名', validators=[DataRequired(u'用户名不能为空')])
    password = PasswordField(label=u'密码', validators=[DataRequired(u'密码名不能为空')])
    password2 = PasswordField(label=u'确认密码', validators=[DataRequired(u'确认密码名不能为空'), EqualTo("password", u'两次密码不一致')])
    submit = SubmitField(label=u"提交")


@app.route('/register', methods=['GET', 'POST'])
def register():
    # 创建表单对象,如果是post请求,前端发送了数据,flask会把数据在构造form对象的时候,存放到对象中
    form = RegisterForm()
	# 判断form中的数据是否合理,如果form中的数据完全满足所有验证器,则返回真,否则返回假
	if form.validate_on_submit():
		# 表示验证合格
		# 提取数据
		uname = form.user_name.data
		pwd = form.password.data
		cpwd = form.password2.data
		session['user_name'] = uname
		return redirect(url_for('index'))

    return render_template("register.html", form=form)

@app.route('/index')
def index():
	user_name = session.get('user_name', '')
	return 'hello %s' % user_name

if __name__ == '__main__':
    app.run()
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form method="post">
    	{{ form.csrf_token }}
    	
       	{{ form.user_name.label }}
       	<p>{{ form.user_name }}</p>
       	{% for msg in form.user_name.errors %}
       	<p>{{ msg }}</p> 
       	{% endfor %}

       	{{ form.password.label }}
       	<p>{{ form.password }}</p>
       	{% for msg in form.password.errors %}
       	<p>{{ msg }}</p> 
       	{% endfor %}


       	{{ form.password2.label }}
       	<p>{{ form.password2 }}</p>
       	{% for msg in form.password2.errors %}
       	<p>{{ msg }}</p> 
       	{% endfor %}

       	{{ form.submit }}
    </form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

WTForms支持的HTML标准字段

字段对象说明
StringField文本字段
TextAreaField多行文本字段
PasswordField密码文本字段
HiddenField隐藏字段文本
DateField文本字段,值为datetime.date格式
DateTimeField文本字段,值为datetime.datetime格式
IntegerField文本字段值,值为整数
DecimalField文本字段,值为decimal.Decimal
FloatField文本字段,值为浮点数
BoolenField复选框,值为True或False
RedioField一组单选框
SelectField下拉列表
SelectMultipleField下拉列表,可选择多个值
FileField文本上传字段
SubmitField表单提交按钮
FormField把表单作为字段嵌入另一个表单
FieldList一组指定类型的字段

WTForms常用验证函数

验证函数说明
DataRequired确保字段中有数据
EqualTo比较两个字段的值,常用于比较两次密码输入
Length验证输入的字符长度
NumberRange验证输入的值在数字范围内
URL验证URL
AnyOf验证输入值在可选列表中
NoneOf验证输入值不在可选列表中

使用Flask-WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的秘钥生成加密令牌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值