flask web表单

一、Web表单

Web 表单是 Web 应用程序的基本功能。

它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。

在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能

二、WTForms支持的HTML标准字段

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

三、WTForms常用验证函数

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

使用 Flask-WTF 需要配置参数 SECRET_KEY。

CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。

配置如下:

app.config['WTF_CSRF_ENABLED'] = True  # 默认开启保护
app.secret_key = "a random string"

四、自定义表单

 1 from flask import Flask,render_template, flash
 2 #导入wtf扩展的表单类
 3 from flask_wtf import FlaskForm
 4 #导入自定义表单需要的字段
 5 from wtforms import SubmitField,StringField,PasswordField
 6 #导入wtf扩展提供的表单验证器
 7 from wtforms.validators import DataRequired,EqualTo
 8  
 9 app = Flsak(__name__)
10  
11 pp.config['WTF_CSRF_ENABLED'] = True  # 默认开启,可不写这句代码
12 app.secret_key = "a random string"
13  
14 # 自定义注册表单, 继承FlaskForm类
15 class RegisterForm(FlaskForm):
16     username = StringField("用户名:", validators=[DataRequired('请输入用户名')], render_kw={'placeholder': '请输入用户名'})
17     password = PasswordField("密码:", validators=[DataRequired('请输入密码')], render_kw={'placeholder': '请输入密码'})
18     password2 = PasswordField("确认密码:", validators=[DataRequired('请再次输入密码'), EqualTo(password, '两次密码输入不一致')], render_kw={'placeholder': '请确认密码'})
19     submit = SubmitField("注册")
20 
21 
22 @app.route('/register_wtf', methods=['GET', 'POST'])
23 def register_wtf():
24     # 表单类实例化,渲染模板--在页面上显示表单
25     form = RegisterForm()
26     # 判断提交方式是否是post,是,说明用户提交的表单
27     if request.method == 'POST':
28         # 对表单进行验证
29         if form.validate_on_submit():
30             # 验证通过执行以下代码
31             username = request.form.get('username')
32             password = request.form.get('password')
33             password2 = request.form.get('password2')
34 
35             print(username, password, password2)
36             # if password != password2:
37             #     flash("两次密码输入不一致")
38             return "验证通过"
39         else:
40             # 消息闪现,渲染模板
41             flash('参数错误')
42 
43     return render_template('temp_wtf.html', form=form)
44 
45 if __name__ == '__main__':
46     app.run(debug=True)

  

猜你喜欢

转载自www.cnblogs.com/itelephant/p/9489602.html