лучший способ отправить переменную вместе с HttpResponseRedirect

#django #django-views

#джанго #django-просмотры #django

Вопрос:

Я читаю djangobook и получаю вопросы о HttpResponseRedirect и render_to_response .

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

 return render_to_response('thank_you.html',
                          dict(user_code = user_code),
                          context_instance=RequestContext(request))
  

Однако в книге предлагалось «Вы всегда должны выполнять перенаправление для успешных POST запросов». потому что, если пользователь «Обновится» на этой странице, запрос будет повторен. Интересно, каков наилучший способ отправить user_code через HttpResponseRedirect в thank_you.html .

Ответ №1:

Передайте информацию в строке запроса:

 thank_you/?user_code=1234
  

Или используйте переменную сеанса.

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

Ответ №2:

Когда вы отправляете перенаправление, вы отправляете пользователю ответ (HTTP-ответ 302), и затем они делают совершенно новый запрос на указанный URL. Это совершенно новый цикл запроса / ответа, поэтому нет способа предоставить данные, если вы не сохраните их в переменной сеанса, кэше, cookie и т.д.

Что вы можете сделать вместо того, чтобы указывать пользователю перенаправлять, это вызвать представление, которое вы хотите показать им самостоятельно, из того же запроса (т. Е. в тот момент, когда вы бы отправили перенаправление), а затем вы могли бы передать все, что вам нравится.