Flask——使用表单并检验参数

回顾上期的程序代码:

from flask import Flask,render_template
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,EqualTo

app = Flask(__name__)

# 配置参数SECRET_KEY
app.config["SECRET_KEY"] = "ASDHJAVDHJASDVASYJDV"

# 定义表单的模型类
class RegisterFrom(FlaskForm):
    """自定义的注册表单模型类"""
    # StringField,PasswordField的参数分别是 模块名字,对应验证器
    # DataRequired 保证数据必须填写,并且不能为空
    user_name = StringField(label = u"用户名",validators=[DataRequired(u"用户名不能为空")])
    user_password = PasswordField(label=u"密码",validators=[DataRequired(u"密码不能为空")])
    same_password = PasswordField(label=u"确认密码", validators=[DataRequired(u"密码不能为空"),EqualTo("user_password",u"两次密码不一致")])

    submit = SubmitField(label="提交")

@app.route("/register")
def index():
    form = RegisterFrom()
    return render_template("register.html",form = form)

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

这里的“提交”按钮点击后的数据会返回register函数中,此时可以对返回的数据进行处理,如以下程序进行操作:

from flask import Flask, render_template, redirect, session, url_for
from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,EqualTo

app = Flask(__name__)

# 配置参数SECRET_KEY
app.config["SECRET_KEY"] = "ASDHJAVDHJASDVASYJDV"

# 定义表单的模型类
class RegisterFrom(FlaskForm):
    """自定义的注册表单模型类"""
    # StringField,PasswordField的参数分别是 模块名字,对应验证器
    # DataRequired 保证数据必须填写,并且不能为空
    user_name = StringField(label = u"用户名",validators=[DataRequired(u"用户名不能为空")])
    user_password = PasswordField(label=u"密码",validators=[DataRequired(u"密码不能为空")])
    same_password = PasswordField(label=u"确认密码", validators=[DataRequired(u"密码不能为空"),EqualTo("user_password",u"两次密码不一致")])

    submit = SubmitField(label="提交")

@app.route("/register", methods=["GET", "POST"])
def register():
    # 创建表单对象,如果时post请求,前端发送了数据,flask会把数据在构造form对象的时候,存放到对象中
    form = RegisterFrom()
    # 判断form中的数据是否合理,如果返回的数据不合理(即通过不了表单的验证器)就不会执行以下代码
    if form.validate_on_submit():
        name = form.user_name.data
        password = form.user_password.data
        again_password = form.same_password.data
        print(name, password, again_password)
        session["user_name"] = name
        # 跳转到新建的视窗中
        return redirect(url_for("index"))
    return render_template("register.html",form = form)

# 新建视窗函数,验证结果是否有误
@app.route("/index")
def index():
    result = session.get("user_name", " ")
    return "hello %s \n welcome to my world"%result

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

对应的html文件为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post">
        {{ form.user_name.label }}
        <p>{{form.user_name}}</p>
        {% for msg in form.user_name.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{ form.user_password.label }}
        <p>{{form.user_password}}</p>
        {% for msg in form.user_password.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{ form.same_password.label }}
        <p>{{form.same_password}}</p>
        {% for msg in form.same_password.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{form.submit}}
    </form>
</body>
</html>

启动程序后打开浏览器界面为:
在这里插入图片描述
当两个密码输入不一致返回的场景为:
在这里插入图片描述
当两个密码输入一致返回的场景为:
在这里插入图片描述
这里看到当输入参数正确的情况下,没有跳转到新建的视窗中,因为我们只设置cookies里CSRF,但在表单中并没有设置,因此要在表单中设置好CSRF,修改对应的html文件为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post">
        {{ form.csrf_token }}

        {{ form.user_name.label }}
        <p>{{form.user_name}}</p>
        {% for msg in form.user_name.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{ form.user_password.label }}
        <p>{{form.user_password}}</p>
        {% for msg in form.user_password.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{ form.same_password.label }}
        <p>{{form.same_password}}</p>
        {% for msg in form.same_password.errors %}
        <p>{{msg}}</p>
        {% endfor %}

        {{form.submit}}
    </form>
</body>
</html>

重新启动程序打开浏览器界面(这是确保输出的参数满足要求,即两次输入的密码一致):
在这里插入图片描述
点击“提交”按钮,跳转到新建的视窗中:
在这里插入图片描述
上述是一个容易忽略的要点,因此单独拿出来进行说明,以上就是flask使用表单并检验参数的基本方法,有疑问的欢迎评论或私信博主啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值