#python #django
#python #django
Вопрос:
У меня есть следующий пользовательский поток:
1) пользователь регистрируется.
2) у пользователя есть страница ‘getting_started’, где он заполняет некоторую базовую информацию и добавляет картинку.
3) пользователь активирует свою электронную почту и входит в систему
После того, как пользователь закончил заполнять свою информацию на странице «Начало работы», если он вернется на страницу getting_started/
, я хочу, чтобы пользователь был перенаправлен на его home/
. Какой был бы самый простой способ добиться этого? (В качестве ссылки, аналогично потоку регистрации в LinkedIn или Facebook).
Способ, который приходит мне на ум, — это установить глобальную переменную getting_started = 1 после того, как пользователь заполнит getting_started
страницу, и на getting_started
странице выполните —
if getting_started:
redirect to home/
else:
...(normal getting started view)...
Ответ №1:
Это просто просмотр getting_started / страница, на которую вы хотите перенаправить? Не думайте в терминах глобальных переменных, думайте в терминах полей базы данных!
Как только ваш пользователь зарегистрируется, он станет зарегистрированным пользователем (если вы используете приложение djangos auth), и у него будет запись в базе данных. Поэтому вам просто нужно проверить, зарегистрирован ли пользователь уже: если да, перенаправьте, в противном случае разрешите им продолжить регистрацию.
Вы могли бы просто поставить проверку в начале представления getting_started, чтобы увидеть, зарегистрировался ли пользователь уже
from django.http import HttpResponseRedirect
def getting_started_view(request):
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('home_view'))
где home_view находится в вашем urls.py:
url("...","someapp.views.viewname", name="home_view"),
...
(или вы могли бы жестко запрограммировать перенаправление)
Если вы ищете более сложные перенаправления (возможно, многочисленные страницы, которые требуют перенаправления на домашнюю страницу), вам следует подумать о написании некоторого промежуточного программного обеспечения. Это позволит вам перехватывать каждый поступающий запрос, проверять, относится ли он к определенной странице, и перенаправлять.
https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs
Комментарии:
1. Спасибо, это очень полезно. Одно условие: если пользователь находится на странице getting_started И он нажимает на электронное письмо для аутентификации в своей ссылке, я хочу, чтобы пользователь все еще мог заполнить страницу getting_started. Как бы я это обеспечил?
2. Вы могли бы добавить поле в профиль пользователя (логическое поле), которое отслеживает, была ли заполнена эта информация или нет. Как вы сохраняете эти дополнительные данные для начала работы? Вместо того, чтобы использовать дополнительное поле, вы могли бы просто выполнить запрос к дополнительным данным, чтобы узнать, существуют они или нет, и перенаправить соответствующим образом, т.Е. если GettingStartedData.objects.filter(user_id=user_id пользователя).exists() …