Вы должны следовать шаблону Post / Redirect / Get , чтобы избежать дублирования при отправке формы.
Этот шаблон можно интегрировать с обработкой ошибок и успешным отображением сообщений следующим образом:
if POST_REQUEST:
ERRORS = VALIDATE_FORM()
if ERRORS IS EMPTY:
PROCESS_REQUEST
REDIRECT TO <Successful URL>
DISPLAY_FORM(ERRORS)
Это возможные сценарии:
- Получить запрос по URL-адресу формы:
POST_REQUEST имеет значение false, поэтому вы просто отображаете форму без ошибок (так что обычная пустая форма)
- Отправка формы с ошибками:
POST_REQUEST имеет значение true, вы проверяете форму. В этом случае некоторые ошибки будут возвращены в переменной ERRORS (возможно, в массиве). Переменная ERRORS не пуста, поэтому вы просто отображаете форму с сообщениями об ошибках
- Правильная отправка формы:
POST_REQUEST имеет значение true, и вы проверяете форму. С этого времени форма действительна, переменная ERRORS будет пустой, и вы выполните перенаправление на , который отобразит успешное сообщение пользователю.
Используя этот шаблон, вы не позволяете пользователю снова отправлять данные формы при обновлении страницы после правильной отправки формы.
Django Framework предлагает обрабатывать формы таким образом.
Хороший способ обработки ошибок при отображении формы состоит в том, чтобы функция VALIDATE_FORM () возвращала ассоциативный массив ошибок , где каждый ключ - это имя поля, а соответствующий элемент - массив ошибок. сообщения.
Общие ошибки формы (не связанные с указанным полем) должны иметь ключ emtpy.
Таким образом, например, вы можете отображать ошибки в функции DISPLAY_FORM ():
<ul class="errors"><?php foreach(ERRORS['field_name'] as $error) { echo "<li>$error</li>"; } ?></ul>
<input name="field_name" type="text" ... />