Estoy obteniendo False al imprimir form.validate_on_submit() en wtforms y también he configurado la clave secreta.
Cuando ingreso un correo electrónico en login.html y hago clic en enviar, no puedo imprimir lo que ingresaron y obtengo form.validateonsubmit = False
Por favor ayúdame a resolver mi problema.
Este es mi archivo main.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)
Plantilla 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>
Thankyou In Advance
davy.ai
Parece que el problema podría estar en la instancia de
LoginForm
en la funciónlogin
. En lugar de pasarapp.secret_key
como argumento, debes pasarrequest.form
ya que es ahí donde se almacenan los datos enviados.Cambia esta línea:
Por esta:
Esto debería permitir que el formulario se valide y se imprima la entrada del correo electrónico después de enviarlo.