проверка ошибок и мигание сообщений об ошибках с FlaskForm - PullRequest
0 голосов
/ 12 марта 2020

У меня есть форма, которая настроена, как показано ниже, и в конечном итоге ошибка, которую я получаю в режиме отладки, составляет sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed. Я понимаю, почему, но я хотел бы, чтобы эта ошибка была представлена ​​пользователю, чтобы он знал проблему.

class RegistrationForm(FlaskForm):
    company_url = StringField('Company Website', validators=[DataRequired(), URL(message='Must be a valid URL')])
    password = PasswordField(
        'Password', validators=[DataRequired(), EqualTo('pass_confirm',
                                                        message='Passwords must match')]
    )
    pass_confirm = PasswordField('Confirm Password', validators=[DataRequired()])
    submit = SubmitField('Register!')

Однако, когда неверная структура URL введена в форму и отправлена, я не могу ее получить to fla sh сообщение об ошибке на странице html для пользователя. Страница html находится ниже. Я также размещу основание. html ниже.

{% extends "base.html" %}
{% block content %}
    <form method="POST">
        {{form.hidden_tag()}}
        {{form.company_url.label}}{{form.company_url()}}<br>
        {{form.password.label}}{{form.password()}}<br>
        {{form.pass_confirm.label}}{{form.pass_confirm()}}<br>
        {{form.submit()}}
    </form>
{% endblock %}
<!DOCTYPE html>
<html>
  <head>
   ...some code here
  </head>
  <body>
    <!-- Just an image -->
<nav class="navbar navbar-dark bg-dark">
  <span class="align-bottom text-light">Creating connections, saving time</span>
</nav>

    {% with messages = get_flashed_messages() %} {% if messages %} {% for
    message in messages %}
    <div class="alert alert-warning alert-dismissible" role="alert">
      <button
        type="button"
        class="close"
        data-dismiss="alert"
        aria-label="Close"
      >
        <span aria-hidden="true">×</span>
      </button>
      {{message}}
    </div>
    {% endfor %} {% endif %} {% endwith %} {% block content %} {% endblock %}
  </body>
</html>

views.py:

@app.route('/register', methods=['GET', 'POST'])
def register():

    form = RegistrationForm()

    if form.validate_on_submit():
        user = Buyers(
            company_url=form.company_url.data,
            password=form.password.data
        )

        db.session.add(user)
        db.session.commit()
        flash("Thank you for registering.")
        return redirect(url_for('login'))

    return render_template('register.html', form=form)

Как обрабатывать ошибки в формах, чтобы убедиться, пользователь знает, что они ввели URL с неверной структурой? Я нахожусь в режиме отладки, и сейчас страница реестра. html просто перезагружается без какого-либо сообщения о том, почему. Спасибо!

1 Ответ

1 голос
/ 12 марта 2020

views.py:

import validators

@app.route('/register', methods=['GET', 'POST'])
def register():

    form = RegistrationForm()

    if form.validate_on_submit():
        isUrlValid=validators.url(form.company_url.data)
        if isUrlValid==True:
            user = Buyers(
                company_url=form.company_url.data,
                password=form.password.data
            )
            db.session.add(user)
            db.session.commit()
            flash("Thank you for registering.")
            return redirect(url_for('login'))
        else:
            flash("URL is not valid. Please enter a valid URL")
            return redirect(url_for('register'))

    return render_template('register.html', form=form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...