搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 测试游记 > Flask(表单验证 八)

Flask(表单验证 八)

测试游记 2020-06-30

WTForms

安装

$ pip install flask-wtf

导入

from flask_wtf import FlaskForm

编写校验器

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import Regexp, DataRequired, Length, EqualTo


class RegisterForm(FlaskForm):
    phone = StringField(
        label='手机号码',
        validators=[Regexp(r'^1[3,5,7,8,9]\d{9}$', message='手机号码格式错误'),
                    DataRequired('手机号码不能为空')]
    )
    pwd = PasswordField(
        label='密码',
        validators=[Length(632, message='密码长度不对'),
                    DataRequired('密码不能为空')]
    )
    confirm_pwd = PasswordField(
        label='确认密码',
        validators=[EqualTo('pwd')]
    )

测试

import os
from flask import Flask, request, render_template
from helpers.forms import RegisterForm

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)


@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    form = RegisterForm(request.form)
    if form.validate():
        return "Success"
    return f'Error:{form.errors}'


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

使用form.validate()来验证传入的数据是否符合要求

表单验证

CSRF

解决CSRF问题

html的form中添加

<form action="{{ url_for('register') }}" method="post">
    {{ form.hidden_tag() }}
    <label>手机号码:</label><input name="phone">
    <label>密码:</label><input name="pwd" type="password">
    <label>确认密码:</label><input name="confirm_pwd" type="password">
    <input type="submit">
</form>

{{ form.hidden_tag() }}的作用

Flask(表单验证 八)
前端

register将form传递

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'GET':
        return render_template('register.html',form=form)
    if form.validate():
        return "Success"
    return f'Error:{form.errors}'
Flask(表单验证 八)
正常提交

通过调试模式,可以看到form中的内容。

截屏2020-06-28 下午9.02.43

form.data可以获取到前端获取到的全部数据

优化页面

添加一个下拉框

表单验证中添加

job = SelectField(label='Job',
                  choices=[('teacher''Teacher'),
                           ('doctor''Doctor'),
                           ('engineer''Engineer')]
                  )

html重写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
{{ msg }}
<form action="{{ url_for('register') }}" method="post">
    {{ form.hidden_tag() }}
    {{ form.phone.label() }} {{ form.phone() }}
    {{ form.pwd.label() }} {{ form.pwd() }}
    {{ form.confirm_pwd.label() }} {{ form.confirm_pwd() }}
    {{ form.job.label() }}{{ form.job() }}
    <input type="submit">
</form>
</body>
</html>
自动生成


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Flask(表单验证 八)》的版权归原作者「测试游记」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注测试游记微信公众号

测试游记微信公众号:zx94_11

测试游记

手机扫描上方二维码即可关注测试游记微信公众号

测试游记最新文章

精品公众号随机推荐