Python——Flask_wtf的form表单

前言:

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

具体内容:

    首先请确认环境安装了flask_wtf插件,如果未安装在环境中使用pip安装方式安装即可;

具体使用步骤如下:

     

# coding:utf-8
from flask import Flask, render_template, redirect, 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"] = "xhosd6f982yfhowefy29f"


# 定义表单的模型类
class RegisterForm(FlaskForm):
    """自定义的注册表单模型类"""
    #                       名字            验证器/验证器
    # 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():
    #if form.validate():     #经测试两种验证方法都可行,上边是提交时候验证,validate也能达到同样的效果,validate应用领域应该会大一些;
        # 表示验证合格
        # 提取数据
        uname = form.user_name.data
        pwd = form.password.data
        pwd2 = form.password2.data
        print(uname, pwd, pwd2)
        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(debug=True)

在同级目录创建templates静态文件目录,编写register.html静态文件:




    
    Title
    


#设置csrf_token

{{ form.csrf_token() }} {{ form.user_name.label }}

{{ form.user_name }}

{{ form.password.label }}

{{ form.password }}

{{ form.password2.label }}

{{ form.password2 }}

{{ form.submit() }}

{% for x in get_flashed_messages() %} {{ x }} {% endfor %}

这样表单在提交时候就可以自动进行验证了,和后台接口接收数据验证数据是一个效果;

根据验证器validators中设置的验证会进行对应判断,具体请求如图:

Python——Flask_wtf的form表单_第1张图片

支持相关字段格式如下:
 

WTForms支持的HTML标准字段

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

WTForms常用验证函数

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

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

你可能感兴趣的:(python)