Estoy creando una aplicación de blog. Creé un formulario de registro con método de publicación que solicita detalles. En la ruta del matraz, estoy tratando de verificar si mi formulario se está validando correctamente o no. Para lograr esto, creé una declaración if y cuando la condición es verdadera, intento redirigir a la ruta de inicio. Lo que no está pasando. No estoy seguro de cuál es el problema aquí. Pero puedo ver que la publicación está dando 200 códigos de estado.

Traté de imprimir algo pero no imprime nada. Intenté eliminar el método del archivo html, intenté rehacer la ruta de registro. Supongo que la validación en sí no está sucediendo.

#home route
@app.route('/')
@app.route('/home')
def home():
    return render_template('home.html', posts=posts, title="Home")

# register route
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        #flash(f'Account created for {form.username.data}!', 'success')
        print("Account creation success")
        return redirect(url_for('home'))  # function name for the route.
    return render_template('register.html', title="Register", form=form)
# forms.py file
from flask_wtf import FlaskForm
from  wtforms import StringField,PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired,length, Email,EqualTo
class RegistrationForm(FlaskForm):
    username= StringField('Username',validators=[
        DataRequired(),
        length(min=2, max=20)
    ])
    email= StringField('Email',validators=[
        DataRequired(), Email()
    ])
    password= PasswordField( 'Password', validators=[DataRequired()])
    confirmPassword = PasswordField('Confirm Password', validators=[DataRequired(),EqualTo(password)])
    submit= SubmitField("Sign Up")
<!--This is layout.html which is parent for the home page-->
       <div class="col-md-8">
            {% with messages = get_flashed_messages(with_categories=true) %}
                {% if messages %}
                    {% for category, message in messages %}
                        <div class="alert alert-{{category}}">
                            {{ message }}
                        </div>
                    {% endfor %}
                {% endif %}
            {% endwith%}
            {% block content %}{% endblock content%}
        </div>

<!--This is register.html which will render the form -->
{% extends "layout.html" %}
{% block content %}
    <div class="content-section">
        <form method="POST" action="">
            <!--adds cross site request forgery token. Needed for secuity.-->
            {{ form.hidden_tag() }}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Join Today</legend>
                <div class="form-group">
                    {{ form.username.label(class="form-control-label") }}
                    {{ form.username(class="form-control form-control-lg") }}
                </div>
                <div class="form-group">
                    {{ form.email.label(class="form-control-label") }}
                    {{ form.email(class="form-control form-control-lg") }}
                </div>
                <div class="form-group">
                    {{ form.password.label(class="form-control-label") }}
                    {{ form.password(class="form-control form-control-lg") }}
                </div>
                <div class="form-group">
                    {{ form.confirmPassword.label(class="form-control-label") }}
                    {{ form.confirmPassword(class="form-control form-control-lg") }}
                </div>

            </fieldset>
            <div class="form-group">
                {{ form.submit(class="btn btn-outline-info") }}
            </div>
        </form>
    </div>
    <div class="border-top pt-3">
        <small class="text-muted">
            <!-- url_for() uses the  name of the route function           -->
            Already Have an account? <a class="ml-2" href="{{ url_for('register') }}" >Sign In</a>
        </small>
    </div>
{% endblock content %}

El resultado esperado es que la página debe redirigirse a home.html pero, por alguna razón, permanece en register.html y no hay mensajes de error. Incluso recibo 200 códigos de estado para la operación posterior.

0
srivatsan sozhavaram 1 oct. 2019 a las 18:23

1 respuesta

La mejor respuesta

Después de publicar el formulario tiene errores:

{'confirmPassword': ["Invalid field name '<UnboundField(PasswordField, ('Password',), {'validators': [<wtforms.validators.DataRequired object at 0x7fecdc7b6e80>]})>'."]}

Es porque pasó la instancia de campo password al validador EqualTo en lugar de su nombre como una cadena: 'password'.

confirmPassword = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
0
stasiekz 1 oct. 2019 a las 20:14