validate_on_submit для проверки введенных пользователем данных не видит правильные значения формы - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть приложение Flask, которое является базовым приложением для викторины.Пользователь отвечает на вопрос, и в представлении я проверяю, был ли ответ правильным или нет.У меня проблема в том, что правильный ответ не сравнивается с ответом пользователя.Кажется, он смотрит на правильный ответ следующей формы, а не сравнивает правильный ответ текущей формы.

Я пытался использовать промежуточное представление, чтобы проверить правильный ответ, а также использовать переменные сеанса.Всегда кажется, что он проверяет правильный ответ по значениям следующей формы.

Заранее благодарю за внимание.

Код моей формы:

class QuizForm(FlaskForm):
    question = ''
    answer = RadioField('Answer',coerce=int,
            choices=[],validators=[DataRequired()])
    submit = SubmitField('Submit')
    correct = HiddenField('Correct')

    def validate_answer(self,answer):
        if answer is None:
            raise ValidationError('Please select an answer')

Мои маршрутыкод:

@app.route('/quiz', methods=['GET','POST'])
@login_required
def quiz():
    form = QuizForm()

    #qq = Database entry for questions/choices/correct answer..

    form.question = qq.question
    form.answer.choices = [(1,qq.choice1), (2, qq.choice2),
                           (3,qq.choice3), (4, qq.choice4)]

    form.correct = qq.answer

    if form.validate_on_submit():
        if form.answer.data == form.correct:
            flash('Correct')
        else:
            flash('Incorrect!')

        return redirect(url_for('quiz'))

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

Мой html:

<form action="" method="post" novalidate>
   {{ form.hidden_tag() }}
   <p>
       {{ form.question }}
       {{ form.answer }}
   {% for error in form.answer.errors %}
       <span style="color: red;">[{{ error }}]</span>
   {% endfor %}
   </p>
   <p>{{ form.submit() }}</p>
</form>

1 Ответ

0 голосов
/ 27 декабря 2018

Вы должны создать два отдельных маршрута: @ app.route ('/ quiz', method = ['GET']) @ app.route ('/ quiz', method = ['POST'])

...