Python Flask: неверный метод запроса по почте с включенной опцией радио - PullRequest
0 голосов
/ 28 августа 2018

Допустим, в моем html-скрипте 2 переключателя, одна из которых отмечена по умолчанию:

<form action="" method="post">
    <div class="radio-option checked">
        <input type="radio" name="radioName" value="val_1"/>
    </div>
    <div class="radio-option">
        <input type="radio" name="radioName" value="val_2"/>
    </div>
    <div>
        <input type="submit" value="Confirm and continue"/>
    </div>
</form>

Если я нажимаю кнопку отправки , не нажимая другую радиокнопку , я получаю сообщение об ошибке:

Bad Request Браузер (или прокси) отправил запрос на этот сервер не мог понять.

Это происходит из-за того, что нет значения, которое передается, если переключатель по умолчанию имеет значение checked, но впоследствии не выбирается мышью! Это то, что request.form показывает мне ImmutableMultiDict([]). Если я выберу другую радиокнопку с помощью мыши и нажму кнопку отправки, она покажет мне значения ImmutableMultiDict(['radioName', 'val_2'])

Я пытался поймать ошибку, как это, но это не сработало:

if request.form == '':
    flash('error')
    return render_template('default_template.html')
  1. Как я могу справиться с этим в flask?
  2. Как установить значение по умолчанию, которое можно отправить на сервер?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете выполнить проверку в колбе. Проверьте, есть ли в request.form элементы или нет, и в этом случае выведите ошибку. Простой способ узнать, будет ли он пустым, например:

if len(request.form) == 0:
    print('Error: The form is empty')
else:
    print('The form has data, we can proceed')

Другой способ:

if 'radioName' not in request.form:
    print('Error: The form is empty')
    ...

Но, возможно, у колбы есть лучший способ сделать это, или есть лучшие практики, которым нужно следовать в этих случаях.

С другой стороны, в HTML-фрагменте, который вы разместили, ни один из входов не отмечен по умолчанию. У вас есть checked класс css для div, но нет атрибута checked в input с type=radio.

Правильное использование проверенного атрибута будет выглядеть следующим образом:

<form action="" method="post">
    <div class="radio-option checked">
        <input type="radio" name="radioName" value="val_1" checked/>
    </div>
    <div class="radio-option">
        <input type="radio" name="radioName" value="val_2"/>
    </div>
    <div>
        <input type="submit" value="Confirm and continue"/>
    </div>
</form>

Таким образом, радиовход со значением val_1 будет проверяться по умолчанию, заполняя словарь, который отправляется на сервер.

Для получения дополнительной информации, проверьте: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio

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

Чтобы узнать больше об этом: https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation

Надеюсь, это поможет!

...