flask中web表单的实现

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

它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮

表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。

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

WTForms中支持的HTML标准字段
字段对象说明
StringField文本字段
TextAreaField多行文本字段
passwordField密码文本字段
HiddenField隐藏文本字段
DateField文本字段,值为datetime.date格式
DateTimeField文本字段,值为datetime.datetime格式
IntegerField文本字段,值为decimal.Decimal
FloatField文本字段,值为浮点数
BooleanField复选框 值为True或者False
RadioField一组单选框
SelectField下拉列表
SelectMultipleField下拉列表,可选多个值
FileField文本上传字段
SubmitField表单提交按钮
FormField把表单作为字段嵌入到另一个表单
FieldList一组指定类型的字段
WTForms常用验证函数
验证函数说明
DataRequired确保字段中有数据
EqualTo比较两个字段的值,常用于比较两次密码输入
Length验证输入的字符串的长度
NumberRange验证输入的值在数字的范围之内
URL验证URL
AnyOf验证输入值在可选的列表中
NoneOf验证输入值不在可选列表中
配置SECRET_KEY

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

# coding:utf-8
from flask import Flask,render_template,request
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,EqualTo

app = Flask(__name__)

# 如果使用wtf框架,在内部已经使用了session
app.config["SECRET_KEY"] = 'ryang'

class RegisterForm(FlaskForm):
    """定义自己的注册类"""
    # DataRequired :必须输入值
    # validator: 校验
    user_name = StringField(label = u"用户名",validators=[DataRequired(u'必须填写用户名')])
    password = PasswordField(label=u'密码',validators=[DataRequired(u'必须填写密码')])
    # EqualTo(""):第一参数表示想要跟谁校验 第二个参数是提示信息
    password2 = PasswordField(label=u'确认密码',validators=[DataRequired(u'必须填写密码'),
                                                        EqualTo('password',u'两次输入不一致')])
    submit = SubmitField(u'注册')


@app.route("/register",methods=["GET","POST"])
def register():
    if request.method == "GET":
        form  = RegisterForm()
        return render_template('05_wtf.html',form = form)
    else:
        form  = RegisterForm()
        # validate_on_submit:作用是在提交的时候进行检验
        # true表示校验通过 false表示校验失败
        if form.validate_on_submit():
            name = form.user_name.data
            pwd = form.password.data
            print("name = %s" %name)
            print("pwd = %s" %pwd)
            return "注册成功"
        else:
            return render_template("05_wtf.html",form = form)

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

第二种实现思路:

# coding:utf-8
from flask import Flask,render_template
from flask import redirect,session,url_for
from flask import request,flash
# 导入wtf扩展的类
from flask_wtf import FlaskForm
# 导入自定义表单需要的数据
from wtforms import SubmitField,StringField,PasswordField
# 导入wtf扩展需要的表单验证器
# from wtforms.form import Form
from wtforms.validators import DataRequired,EqualTo

app  = Flask(__name__)

# 配置参数 防止csrf跨站攻击
app.config['SECRET_KEY'] = 'silents is gold'

# 自定义表单类、文本字段、密码字段和提交按钮
class Login(FlaskForm):
    us = StringField(label=u'用户',validators=[DataRequired()])
    ps = PasswordField(label=u'密码',validators=[DataRequired(),EqualTo('ps2','err')])
    ps2 = PasswordField(label=u'确认密码',validators=[DataRequired()])
    submit = SubmitField(u'提交')

@app.route('/login')
def login():
    return render_template('login.html')


# 根据路由视图函数,生成表单对象,获取表单数据,进行表单数据验证
@app.route("/",methods=['GET',"POST"])
def index():
    form = Login()
    if form.validate_on_submit():
        name = form.us.data
        pswd = form.ps.data
        pswd2 = form.ps2.data
        print(name,pswd,pswd2)
        return '注册成功!'
    else:
        if request.method == "POST":
            flash(u'信息有误,请重新输入!')
        # 进入此处说明是get请求 打印一个false 然后返回login页面
        print(form.validate_on_submit())
    return render_template('login.html',form=form)


if __name__ == '__main__':
    app.run(debug=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值