Страница не перенаправляет при отправке формы - PullRequest
0 голосов
/ 01 октября 2019

Я создаю приложение для блога. Я создал регистрационную форму с методом post, который запрашивает детали. На маршруте фляги я пытаюсь проверить, правильно ли проверяет моя форма или нет. Чтобы добиться этого, я создал оператор if и, когда условие выполняется, я пытаюсь перенаправить на домашний маршрут. Которого не происходит. Я не уверен, в чем здесь проблема. Но я вижу, что в сообщении указан код состояния 200.

Я пытался что-то напечатать, но ничего не печаталось. Я пытался удалить метод из файла html, я пытался повторить маршрут реестра. Я предполагаю, что сама проверка не происходит.

#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 %}

Ожидаемый результат -страница должна перенаправлять на home.html, но по какой-то причине она остается в register.html и сообщений об ошибках нет. Я даже получаю 200 кодов статуса для почтовой операции.

1 Ответ

0 голосов
/ 01 октября 2019

После публикации формы она имеет ошибки:

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

Это потому, что вы передали password экземпляр поля в EqualTo валидатор вместо его имени в виде строки: 'password'.

confirmPassword = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...