Как запретить пользователям возвращаться на предыдущую страницу с помощью кнопки «Назад» браузера (вместо этого перенаправить на другую страницу)? - PullRequest
1 голос
/ 20 декабря 2011

Я работаю над сайтом, который позволил бы пользователям публиковать некоторые данные. Чтобы успешно добавить новый пост, пользователям необходимо пройти три состояния: Форма -> Предварительный просмотр -> Опубликованная страница . Я хочу запретить пользователям возвращаться на страницу предварительного просмотра с помощью кнопки «Назад» браузера, когда они уже достигли опубликованной страницы (вместо этого они должны быть перенаправлены на пустую страницу формы). Как я могу реализовать это поведение в Django?

Ответы [ 3 ]

3 голосов
/ 20 декабря 2011

Я не уверен, как вы получаете это желаемое поведение от Django, поскольку у вас ограниченный контроль над браузером пользователя. Тем не менее, в Javascript вы можете использовать:

window.location.replace(url);

, которая удалит историю, тем самым не давая работать кнопке «Назад».

См. Этот вопрос переполнения стека о расположении окна:

В чем разница между window.location = и window.location.replace ()?

Идея: на странице предварительного просмотра используйте AJAX для отправки и, если все прошло успешно, window.location.replace на опубликованную страницу.

0 голосов
/ 20 декабря 2011

мастер формы django должен делать, что вы хотите:

Как это работает

Вот основной рабочий процесс для использования пользователем мастера:

  1. Пользователь заходит на первую страницу мастера, заполняет форму и отправляет ее.
  2. Сервер проверяет данные. Если он недействителен, форма отображается снова с сообщениями об ошибках. Если он действителен, сервер сохраняет текущее состояние мастера в бэкэнде и перенаправляет на следующий шаг.
  3. Повторите шаги 1 и 2 для каждой последующей формы в мастере.
  4. Как только пользователь отправил все формы и все данные были проверены, мастер обрабатывает данные - сохраняя их в база данных, отправка электронного письма или все, что требуется приложению.
0 голосов
/ 20 декабря 2011

Я не могу говорить о том, как справиться с этим, используя технологии браузера, но с django вы можете просто установить флаг в сеансе.

# posted_page view
request.session['posted_page_visited'] = True

# preview_page view
if request.session.get('posted_page_visited'):
    del request.session['posted_page_visited']
    return http.HttpResponseRedirect("form_page")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...