Flask框架中的表单模型验证(十四)

一、表单模型验证(必须写秘钥,否则报错)

使用Flask-WTF表单扩展(表单模型验证需要的库),可以帮助进行CSRF验证,帮助我们快速定义表单模板,而且可以帮助我们在视图中验证表的数据

pip install Flask-WTF 
1、不使用Flask-WTF扩展时,表单需要自己处理
#模板文件
<form method="post">
    <input name="text" name="username" placeholder="username">
 <input name="password" name="password" placeholder="password">
    <input type="submit" value="提交">
</form>
from flask import Flask, session, request, url_for, render_template

@app.route('/login', methods=['GET','POST'])
def login():
    if  request.method == 'POST':
         username=request.form.get('username')
         password = request.form['password']
         return '登陆成功'
   else:
         return render_template("login.html")
2、进行自定义表单模型验证
  • 自定义表单类,文本字段,密码字段,提交按钮
from flask import Flask, session, request, url_for, render_template, redirect
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired, EqualTo #这是验证器中的函数
from wtforms import StringField, PasswordField, SubmitField #这是字段的类型
app = Flask(__name__, template_folder='templates', static_url_path='/static')
app.secret_key = '1'


#自定义注册表单模型验证
class RegisterForm(FlaskForm):
    #DataRequired保证数据必须填写,并且不能为空
    #label是字段的名字,validators是验证器
    username = StringField(label=u'用户名', validators=[DataRequired(u'用户名不能为空')])
    password = PasswordField(label=u'密码', validators=[DataRequired(u'密码不能为空')])
    repeat_password = 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对象中
    form = RegisterForm()
    #判断form中的数据是否合理
    #如果form中的数据完全满足所有的验证,则返回真,否则返回否
    var = form.validate_on_submit()
    if var:
        #表单验证合格
        #提取数据
        username = form.username.data
        password = form.password.data
        repeat_password = form.repeat_password.data
        print(username, password, repeat_password)
        session['username'] =username
        return redirect(url_for('index'))
    return render_template('HomePage/register.html', form=form)


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


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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册测试</title>
</head>
<body>
<form method="post">
        {{ form.csrf_token }}
{# 标签名#}
    <p>{{ form.username.label }}</p>
{#  输入框#}
    <p>{{ form.username }}</p>
{# 错误提示信息#}
    {% for msg in form.username.errors %}
       <p>{{ msg }}</p>
    {% endfor %}

 {# 标签名#}
    <p>{{ form.password.label }}</p>
{#  输入框#}
    <p>{{ form.password }}</p>
{# 错误提示信息#}
    {% for msg in form.password.errors %}
       <p>{{ msg }}</p>
    {% endfor %}

    {# 标签名#}
    <p>{{ form.repeat_password.label }}</p>
{#  输入框#}
    <p>{{ form.repeat_password }}</p>
{# 错误提示信息#}
    {% for msg in form.repeat_password.errors %}
       <p>{{ msg }}</p>
    {% endfor %}
{#  提交按钮#}
     {{ form.submit }}
</form>
</body>
</html>

二、表单模型验证中的WTForms支持的HTML标准字段

发布了21 篇原创文章 · 获赞 0 · 访问量 122

猜你喜欢

转载自blog.csdn.net/qq_41706810/article/details/105737951