Files
contracts/History/sessions/session-04-prg-fix.md
T

1.7 KiB
Raw Blame History

Исправление PRG-паттерна и окна повторной отправки (15.06.2026)

Проблема

При нажатии F5 (перезагрузка) браузер выдает окно «Подтвердите повторную отправку формы». Это происходит потому, что последним запросом был POST (на загрузку или на обработку), и страница отображается как результат этого POST-запроса.

Решение: PRG (Post-Redirect-Get)

Все POST-обработчики должны завершаться инструкцией redirect(...).

  1. Пользователь отправляет POST.
  2. Сервер обрабатывает данные.
  3. Сервер возвращает статус 302 (Redirect).
  4. Браузер делает автоматический GET на новый URL.
  5. Теперь в истории браузера последний запрос — GET. При нажатии F5 просто обновится страница без всяких окон.

Что сделано:

  • В app.py проверено, что _upload_files делает redirect("/?id=" + contract_id).
  • В app.py проверено, что _process делает redirect("/?id=" + cid).
  • Добавлена очистка параметров, если они могут вызвать зацикливание.

Статус

  • Реализован Redirect после всех POST-запросов.
  • Окно подтверждения больше не должно появляться при F5 на странице договора.