Изменить URL после отправки формы без использования перенаправления - PullRequest
0 голосов
/ 28 апреля 2019

После отправки регистрационной формы я хочу, чтобы пользователь перешел на страницу благодарности / подтверждения.

Регистрационная форма находится в / register /, а страница подтверждения - в / register / verify /

Я понимаю, что могу сделать это следующим образом:

if register_form.is_valid():
#save data etc.


#SCENARIO 1
#go to the confirmation view
return register_confirm(request)

Это отображает страницу подтверждения в браузере, но фактический URL НЕ меняется с / register / на /register/confirm/.

#SCENARIO 2
#redirect to confirmation view
return redirect('register_confirm')

В браузере отображается страница подтверждения, и фактический URL-адрес ИЗМЕНЯЕТСЯ с / зарегистрировать / на / зарегистрировать / подтвердить / (РЕДАКТИРОВАТЬ после @Borut comment)

#SCENARIO 3
#redirect to URL
return redirect('confirm/')

Отображаетсястраница подтверждения в браузере и фактический URL-адрес ИЗМЕНЯЮТСЯ с / регистрация / на / регистрация / подтверждение /

Так что сценарии в пунктах 2 и 3, приведенных выше, делают то, что я хочу, с точки зрения того, что пользователям показывают подтверждениестраница и URL меняются в браузере.(Для меня важно, что URL-адрес изменяется в браузере по нескольким причинам, но не в последнюю очередь потому, что я хочу, чтобы моя аналитика записывала попадания на страницу подтверждения).

Однако я действительно недумаю, что любое использование «перенаправления» является правильным в этом сценарии.Я просто хочу переместить пользователя на страницу подтверждения (чтобы избежать случайной повторной отправки формы, если они нажмут кнопку «Обновить»).Насколько я понимаю, перенаправления дают, например, код состояния 301 или 302. Это означает, что страница была перемещена либо временно, либо постоянно.

В сценарии простого перемещения пользователя на новую страницу (т.е.ссылки, без необходимости фактически щелкать ссылку), страница регистрации и подтверждения должна иметь код состояния 200. Я не хочу, чтобы поисковые системы думали, что я перенаправляю / register / URL, например, с 301 илиКод состояния 302.

Может кто-нибудь объяснить, как переместить пользователя на новую страницу, с другим URL-адресом, отображаемым в окне браузера, но без использования перенаправления или, по крайней мере, не давая 30xкод состояния.

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2019

Хорошо, если вы вообще не хотите использовать redirect, вы можете вызвать представление регистрации с URL-адреса подтверждения и отобразить другой шаблон.

Вы не раскрыли большую часть своего кода, поэтому вот общий пример:

urls.py

from . import views

path("register/", views.your_register_view)
path("register/confirm/", views.your_register_view)

register_template.html

<form action="register/confirm/" action="post">
  <input type="submit" value="register">
</form>

views.py

def your_register_view(request):
    if request.method == "POST":
        #validate form data here
        return render(request, "confirm_template.html")
    else:
        return render(request, "register_template.html")

в основном вы вызываете одно и то же представление из двух разных URL-адресов и визуализируете шаблоны в соответствии с типом запроса (POST или GET.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...