无法获得错误消息以与WTForms _formhelpers一起显示在Flask网页上

问题描述

很抱歉,如果措辞不太好。未满足验证要求时,似乎看不到任何错误消息。当我提交时,表单只是刷新而没有错误消息,例如“此字段为必填”。

此外,当我输入数据时,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',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 %}

解决方法

return render_template("/")无效。我认为您的意思是return redirect("/")

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...