【问题标题】:DataRequired validator detect blank spaces but don't show error messageDataRequired 验证器检测到空格但不显示错误消息
【发布时间】:2023-01-14 05:57:15
【问题描述】:

我正在开发一个烧瓶应用程序,其中我有一个带有必填字段的 WTForm。我使用 DataValidator 来确保字段不为空。当字段为空时它确实显示一条错误消息,但当仅输入空格时不显示错误消息,但它也不验证表单,我最终被重定向到同一页面,直到我输入一些有效输入。我认为这是我项目中的一个错误,但我创建了一个新项目,同样的事情发生了。这是验证器的正常行为还是 wtform 上的错误。 这是 wtform 的 sn-p。

class AddUserForm(FlaskForm):
    """Class for adding a form to template"""

    first_name = StringField("first name ", validators=[DataRequired()])
    last_name = StringField(
        "Last Name",
        validators=[DataRequired()],
    )
    desc = StringField(
        "Description",
        validators=[DataRequired()],
        widget=TextArea(),
    )
    age = IntegerField(
        "Age",
        validators=[
            DataRequired(),
            NumberRange(min=1, message="Age must be at least 1"),
        ],
        default=1,
    )
    tag_1 = StringField(validators=[DataRequired()])
    tag_2 = StringField(validators=[DataRequired()])
    submit = SubmitField("Save")

这是 view.py 代码的 sn-p:

from flask import Flask, redirect, render_template, request, url_for
from .form_models import AddUserForm
import os

app = Flask(__name__)


SECRET_KEY = os.urandom(32)
app.config["SECRET_KEY"] = SECRET_KEY


@app.route("/add", methods=["GET", "POST"])
def add_faq():
    
    form = AddUserForm()

    if form.validate_on_submit():
        print(form.data.items())

    return render_template("add_user.html", form=form)

我尝试使用 InputValidator 但它不检查空格。我还尝试向 DataValidator 添加自定义消息。它再次在字段为空时起作用,但在字段不为空时不发送消息。

烧瓶 2.1.1 烧瓶-WT 1.0.0 WTForms 3.0.0

【问题讨论】:

  • 你能给我们一个可重现的代码示例吗?
  • 请向我们展示您的模板代码。 DataRequired 验证器还应该对空格做出反应并提供错误消息,可以在相应输入字段下的模板中访问该错误消息。例如,您可以遍历“form.first_name.errors”并显示与该字段关联的消息。

标签: python flask flask-wtforms


【解决方案1】:

您可以使用自定义验证器来解决您的问题。向您的类添加一个方法来测试您的字段的有效性。

这是你的代码:

class AddUserForm(FlaskForm):
    """Class for adding a form to template"""

    first_name = StringField("first name ", validators=[DataRequired()])
    last_name = StringField(
        "Last Name",
        validators=[DataRequired()],
    )

    ...

    submit = SubmitField("Save")

    def validate_first_name(form, field):
        if not field.strip():
            raise ValidationError('This Field is required')

您也可以在提交表单之前去除字符串。

我希望这有所帮助。

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多