在wtforms中打印form.validate_on_submit()时,我得到了False,我还设置了密钥



当我在login.html中输入电子邮件并单击提交时,我无法打印他们输入的内容,并且我得到了表单。validate_on_submit=False
请帮助我解决问题。

这是我的主.py文件

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = "hi this key is secret"

class LoginForm(FlaskForm):
email = StringField(label="Email", validators=[DataRequired()])
submit = SubmitField(label="Submit")

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

@app.route("/login", methods=["GET", "POST"])
def login():
form = LoginForm(app.secret_key)
email = None
print(form.validate_on_submit())
if form.validate_on_submit():
print(form.validate_on_submit())
email = form.email.data
form.email.data = ""
else:
print("form not submitted")
return render_template("login.html", form=form, email=email)

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

Jinja模板(index.html(

<!DOCTYPE HTML>
<html>
<head>
<title>Login</title>
</head>
<body>
<div class="container">
{% if email %}
<h1>Your Email Is</h1>
<h3>{{ email }}</h3>
{% else %}
<h1>Login</h1>
<form method="post" action="{{ url_for("login") }}">
{{ form.hidden_tag() }}
{{ form.email.label }} {{ form.email(size=20) }}
{{ form.submit() }}
</form>
{% endif %}
</div>
</body>
</html>

提前感谢

我走对了路main.py文件

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from flask_wtf.csrf import CsrfProtect
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = "hi this key is secret"
csrf = CsrfProtect(app)

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

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

@app.route("/login", methods=["GET", "POST"])
def login():
form = LoginForm(formdata=request.form)
if form.validate_on_submit():
email = form.email.data
password = form.password.data
return render_template("login.html", form=form)

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

Jinja模板

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

这个对我有效,希望对每个都有效

相关内容

最新更新