【问题标题】:Can't get error message to show with WTForms _formhelpers to show on Flask webpage无法使用 WTForms _formhelpers 显示错误消息以显示在 Flask 网页上
【发布时间】:2020-08-13 19:53:52
【问题描述】:

如果措辞不好,敬请见谅。当我没有满足验证要求时,我似乎看不到任何错误消息。当我提交时,表单刚刚刷新,没有诸如“此字段为必填项”之类的错误消息。

另外,当我输入数据时,if form.validate_on_submit(): 没有返回预期的主页,它再次刷新页面。我知道表单什么都不做,我计划将提交的数据添加到数据库,但我被困在这一步。有人可以帮忙吗?谢谢。

app.py

from cs50 import SQL
from flask import Flask, render_template, session, redirect
from flask_session import Session
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField #bool for checkbox
from wtforms.validators import InputRequired, Email, Length


# configure application
app = Flask(__name__)
app.config["SESSION_PERMENANT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

# Allows webpage to update html on refresh
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config['SECRET_KEY'] = 'Itsasecret'
# configure CS50 library to use SQLite database
db = SQL("sqlite:///project.db")

# Usually separate routes, database and form stuff into different files and link together

class LoginForm(FlaskForm):
    username =  StringField('Username', validators=[InputRequired(), Length(min=4, max=15)])
    password = PasswordField('Password', validators=[InputRequired(), Length(min=8, max=80)]) #80 is a special number (learn more)
    remember = BooleanField('Remember me')

@app.route('/')
def homepage():
    return render_template("homepage.html")

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        return redirect("/")
    return render_template("login.html", form=form)

登录模板

{% extends "layout.html" %}
{% from "_formhelpers.html" import render_field %}

{% set active_page = 'login' %}

{% block title %} Login {% endblock %}

{% block body %}
<div class="ls-main">
    <form action="/login" method="POST">
        {{ form.csrf_token }}        
        {{ render_field(form.username) }}
        {{ render_field(form.password, autocomplete="off") }}
        {{ render_field(form.remember) }}
        <div class="ls-div">
            <input class="ls-input, signinbutton" name="submit" type="submit" value="Submit">
        </div>

    </form>
</div>
{% endblock %}

_formhelpers.html

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>
{% endmacro %}

【问题讨论】:

    标签: forms flask flask-wtforms wtforms form-helpers


    【解决方案1】:

    return render_template("/") 无效。我想你的意思是return redirect("/")

    你当然需要from flask import Flask, render_template, session, redirect

    【讨论】:

    • 感谢您发现这个错误。我敢肯定,一旦我弄清楚了我的问题,接下来我就会感到困惑!
    • 解决了问题吗?如果不是,那么新的行为是什么?还有,你的结局在哪里&lt;/dt&gt;
    • 我一定没有正确刷新它,因为最初没有任何改变。但是当我关闭它并重新打开它时,它是固定的!非常感谢,我一直在绞尽脑汁,以为问题太大而无法独自解决。不敢相信最后这么简单。我还修复了结尾&lt;/dt&gt;。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2020-09-07
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多