【问题标题】:How to validate html forms in python Flask?如何在 python Flask 中验证 html 表单?
【发布时间】:2019-04-20 09:12:10
【问题描述】:

我在登录页面中有一个 HTML 表单,我想通过 ajax 将表单数据发送到 /data rout。
问题是在后端验证这个 HTML 表单。
我知道 Flask WTF 表单,但使用这种方法会在后端生成表单,这不是我的情况。

from flask import Flask, request, url_for
...
@app.route("/data", methods=["GET", "POST"])
def get_data():
if request.method == "POST":
    username = request.form["username"]
    ...  

我的html表单:

<form method="POST" action="">
<input type="text" name="username">
<input type="submit" value="Send">
</form>  

一个困难的方法是使用正则表达式验证每个字段并为它们编写几个 if 条件。我想知道更简单的方法吗?

【问题讨论】:

  • 您想如何准确地验证表单?你想做什么检查?
  • 非空。电子邮件、电话、支票等等...
  • 但我不想对所有输入都使用正则表达式。这一定是更好的方法?
  • 如果您不想使用 Flask-WTF 提供的验证方法,您确实需要自己编写它们。您是否有不想使用 Flask-WTF 的特定原因?
  • 我只需要导入您需要的 WTForms 验证器,然后自己根据您的输入运行它们,而无需创建表单。至少它可以避免您为电子邮件、电话、日期等创建自己的正则表达式。

标签: python flask flask-wtforms wtforms


【解决方案1】:

使用Webargs

from webargs import flaskparser, fields

FORM_ARGS = {
    'email': fields.Email(required=True),
    'username': fields.Str(required=True),

@app.route("/data", methods=["GET", "POST"])
def get_data():
    if request.method == "POST":
        parsed_args = flaskparser.parser.parse(FORM_ARGS, request)

但只要您知道传入数据的格式,您仍然可以使用 WTF 来捕获发布的信息(您不需要在页面上呈现 WTForms 以使其工作),例如:

# import blurb    

class Form(FlaskForm):
    username = StringField('Username', validators=[InputRequired()])
    email = EmailField('Email', validators=[InputRequired(), Length(4, 128), Email()])

@app.route("/data", methods=["GET", "POST"])
def get_data():
    if request.method == "POST":
        form = Form()  # will register fields called 'username' and 'email'.
        if form.validate_on_submit():
            # do something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2020-04-30
    • 2020-12-22
    相关资源
    最近更新 更多