簡體   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