繁体   English   中英

FlaskForm validate_on_submit 总是返回 false

[英]FlaskForm validate_on_submit always returns false

我一直在与以下代码作斗争一段时间。 validate_on_submit 方法总是返回 false。

我已经阅读了很多关于这个问题的 StackOverflow 答案,并尝试了我能找到的一切,但它仍然返回 False。

表单作为电子邮件和密码打印的打印语句提交成功,但每次都返回false。

谁能帮我理解我在这里可能做错了什么?

主文件

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, EmailField
from wtforms.validators import DataRequired, Email, Length


class LoginForm(FlaskForm):
    email = EmailField(label="Email", validators=[DataRequired(), Email()])
    password = PasswordField(label="Password", validators=[DataRequired(), Length(min=8)])
    submit = SubmitField(label="Submit")


app = Flask(__name__)
app.secret_key = "*******************"

@app.route("/")
def home():
    return render_template("index.html")

@app.route("/login", methods=["GET", "POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        if form.email.data == "admin@email.com" and form.password.data == "12345678":
            return render_template("success.html")
        else:
            render_template("denied.html")
    print("False")
    return render_template("login.html", form=form)


if __name__ == '__main__':
    app.run(debug=True)

这是表单的 HTML...

登录.html

<!DOCTYPE HTML>

<html>
    <head>
        <title>Login</title>
    </head>
    <body>
        <div class="container">
        <h1>Login</h1>
            <form method="POST" action="{{ url_for('login') }}" novalidate>
                <p>
                    {{ form.csrf_token }}
                    {{ form.email.label }} <br> {{ form.email(size=30) }}
                    {% for err in form.email.errors %}
                    <span style="color:red">{{ err }}</span>
                    {% endfor %}
                </p>
                <p>
                    {{ form.password.label }} <br> {{ form.password(size=30) }}
                    {% for err in form.password.errors: %}
                    <span style="color:red">{{ err }}</span>
                    {% endfor %}
                </p>
                <p>
                    {{ form.submit }}
                </p>
            </form>
        </div>
    </body>
</html>

任何想法我错过了什么,或者在这里做错了什么?

您错过了main.py中的返回

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import SubmitField, PasswordField, EmailField
from wtforms.validators import DataRequired, Email, Length


class LoginForm(FlaskForm):
    email = EmailField(label="Email", validators=[DataRequired(), Email()])
    password = PasswordField(label="Password", validators=[DataRequired(), Length(min=8)])
    submit = SubmitField(label="Submit")


app = Flask(__name__)
app.secret_key = "*******************"

@app.route("/")
def home():
    return render_template("index.html")

@app.route("/login", methods=["GET", "POST"])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        if form.email.data == "admin@email.com" and form.password.data == "12345678":
            return render_template("success.html")
        else:
            return render_template("denied.html") #Was missing
    print("False")
    return render_template("login.html", form=form)


if __name__ == '__main__':
    app.run(debug=True)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM