es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en la instancia de LoginForm en la función login. En lugar de pasar app.secret_key como argumento, debes pasar request.form ya que es ahí donde se almacenan los datos enviados.

    Cambia esta línea:

    form = LoginForm(app.secret_key)
    

    Por esta:

    form = LoginForm(request.form)
    

    Esto debería permitir que el formulario se valide y se imprima la entrada del correo electrónico después de enviarlo.

Comments are closed.