【问题标题】:Why is my wtforms error handling not working? [duplicate]为什么我的 wtforms 错误处理不起作用? [复制]
【发布时间】:2021-12-02 20:09:33
【问题描述】:

我正在尝试构建一个烧瓶登录和注册系统。一切正常,除非用户在表单中输入错误,否则将出现错误,因为还没有有效的错误处理。我正在使用 wtforms,这是注册表单类:

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(),Email()])
    password = PasswordField('Password', validators=[DataRequired(), Length(min=4)])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), Length(min=4), EqualTo('password')])
    submit = SubmitField('Sign Up')

这是注册路径

@app.route('/register',  methods=["GET", "POST"])
def register():
    form = RegistrationForm()

    if request.method == "POST":
        if form.validate_on_submit():
            return redirect(url_for('home'))
    else:
        return render_template('register.html', form=form)

我已经厌倦了处理 html 中的错误,但是每次用户输入不正确的输入时,它都会显示此错误消息“TypeError:'register' 的视图函数没有返回有效响应。该函数返回 None 或结束没有退货声明。”这是我的html表单:

        <form action="/register" method="POST">
          <h1>Create Account</h1>
          {{ form.hidden_tag() }} {% if form.username.errors %} {{
          form.username(placeholder="Username", class="is-invalid") }} {% for
          error in form.username.errors %}
          <span>{{ error }}</span>
          {% endfor %} {% else %} {{ form.username(placeholder="Username") }} {%
          endif %} {% if form.email.errors %} {{ form.email(placeholder="Email",
          class="is-invalid") }} {% for error in form.email.errors %}
          <span>{{ error }}</span>
          {% endfor %} {% else %} {{ form.email(placeholder="Email") }} {% endif
          %} {% if form.password.errors %} {{
          form.password(placeholder="Password", class="is-invalid") }} {% for
          error in form.password.errors %}
          <span>{{ error }}</span>
          {% endfor %} {% else %} {{ form.password(placeholder="Password") }} {%
          endif %} {% if form.confirm_password.errors %} {{
          form.confirm_password(placeholder="Confirm Password",
          class="is-invalid") }} {% for error in form.confirm_password.errors %}
          <span>{{ error }}</span>
          {% endfor %} {% else %} {{ form.confirm_password(placeholder="Confirm
          Password") }} {% endif %}

          <div>{{ form.submit(class="signup") }}</div>
        </form>

任何回复或帮助将不胜感激。谢谢!

【问题讨论】:

    标签: python html flask flask-wtforms wtforms


    【解决方案1】:

    每个视图都必须返回一些东西。如果方法已发布但未验证,则您的不返回任何内容。这是一个逻辑问题,与wtforms无关。

    if request.method == "POST":
        if form.validate_on_submit():
            return redirect(url_for('home'))
        else:
            return 'oops'
    else:
        return render_template('register.html', form=form)
    

    【讨论】:

    • 好的,这解决了错误,谢谢!但不幸的是,错误消息仍然没有显示。你知道如何解决它吗?
    • 您的意思是验证错误?只需返回模板。你的似乎已经准备好展示它们了。
    • 是的,我将路由中的逻辑更改为 if request.method == "POST": if form.validate_on_submit(): return redirect(url_for('home')) else: return redirect(url_for ('register')) 但验证错误仍未显示。
    • 哦对了,我完全忘记了。谢谢!
    猜你喜欢
    • 2011-06-24
    • 2022-01-03
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 2020-08-17
    • 2021-10-29
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多