当我在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>
这个对我有效,希望对每个都有效