表单:

表单是网站与用户交互必不可少的元素。表单中可以提供文本输入框、单选按钮、复选框、按钮等元素供用户提交数据。

表单还有验证数据的作用,这个是通过javascript进行验证的。那么服务器端要进行数据验证是通过第三方插件Flask-WTF。这个工具有主要有几个作用:验证数据和渲染表单HTML标签、CSRF保护和上传文件。

1、安装:

pip install flask-wtf

python 复选框的文本信息怎么设置在左边 flask 复选框_字段

2、register.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>注册</title>
</head>
<body>
    <form action="{{ url_for('register') }}" method="POST">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>邮箱:</td>
                <td><input type="email" name="email"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td>确认密码:</td>
                <td><input type="password" name="confirm_password"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>
</body>
</html>

得到的页面如下:

python 复选框的文本信息怎么设置在左边 flask 复选框_html_02

 

 那我们对这个页面的字段提出一些需求:

1)用户名:至少输入2位以上,最大20个字符;

2)邮箱格式必须以@结尾;

3)密码至少输入6位以上字符;

4)确认密码:该字段内容必须和密码字段内容一致。

如果用户输入错误,在页面上要及时给出提示。

这个工作可以由前端Javascript来完成,但是服务器端也要做好验证。有技术功底的人员可以绕开J前端javascript的验证。服务器端的验证可以通过WTForms来实现。

3、在项目的根路径下创建forms.py文件:

from wtforms import Form, StringField
from wtforms.validators import length, email, equal_to


class RegisterForm(Form):
    username = StringField(Validators=[length(min=3, max=20, message="请输入正确长度的用户名")])
    email = StringField(Validators=[email(message="请输入正确格式的邮箱!")])
    password = StringField(Validator=[length(min=6, max=20, message="请输入正确长度的密码")])
    confirm_password = StringField(Validators=[equal_to("password", message="两次密码不一致")])

Field类的类型:

StringField

IntegerField

FloatField

DecimalField

BooleanField

DatetimeField

DateField

TimeField

FileField

每个字段都传递了Validators参数,这个参数是可以存储多个验证器的集合。

验证器的格式:

length(min, max, message) :   验证长度是否在区间内。

email (): 验证内容是否满足邮箱格式规则。

any_of(values, message, values_formatter): 验证是否是value中的一个。

4、视图函数中使用表单:

from wtforms import Form, StringField
from wtforms.validators import length, email, equal_to


class RegisterForm(Form):
    username = StringField(validators=[length(min=3, max=20, message="请输入正确长度的用户名")])
    email = StringField(validators=[email(message="请输入正确格式的邮箱!")])
    password = StringField(validators=[length(min=6, max=20, message="请输入正确长度的密码")])
    confirm_password = StringField(validators=[equal_to("password", message="两次密码不一致")])

5、视图函数中使用表单:

from flask import Flask, render_template, request, redirect, url_for, flash
from forms import RegisterForm
import config

app = Flask("__name__")
app.config.from_object(config)


@app.route("/register", methods=['GET', 'POST'])
def register():
    if request.method == 'GET':
        return render_template("register.html")
    else:
        # request.form是html模板提交上来的表单数据
        form = RegisterForm(request.form)
        if form.validate():
            email = form.email.data
            username = form.username.data
            password = form.password.data

            print("email: ", email)
            print("username: ", username)
            print("password: ", password)
            return "Register Successfully."
        else:
            for errors in form.errors.values():
                for error in errors:
                    flash(error)
            return redirect(url_for("register"))


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

6、增加config.py:

SECRET_KEY="###"

7、浏览器验证:

python 复选框的文本信息怎么设置在左边 flask 复选框_python_03

 

8、如果表单验证失败,则可以通过form.errors获取错误信息。form.errors是字典类型,key是字段名称,value是错误信息列表。

表单验证失败的情况下,首先通过form.errors.values()获取所有错误内容,并存储在flash中,然后在模板中吧flash消息显示出来。

闪现消息:

需要在视图函数中通过flash函数提交消息内容,消息内容有多条,然后在模板中使用get_flashed_message函数获取函数中提交的消息内容。返回一个列表,使用for循环或者索引取出消息内容。

闪现消息存储在session中,使用之前,必须在app.config中保存SECRET_KEY。随便设置一个值。