URL перенаправления Django, содержащий идентификатор - PullRequest
1 голос
/ 03 июня 2010

Я хочу добавить в мои settings.py объявление вроде:

LOGIN_REDIRECT_URL='^private_profile/(?P<id>\d+)/$'
#or 
LOGIN_REDIRECT_URL='/accounts/private_profile/id/'

, поэтому, когда пользователь с идентификатором 1, например, входит в систему, он будет перенаправлен на

LOGIN_REDIRECT_URL='/accounts/private_profile/1/'

но обе альтернативы,

LOGIN_REDIRECT_URL='^private_profile/(?P<id>\d+)/$'
#or 
LOGIN_REDIRECT_URL='/accounts/private_profile/id/'

не так, потому что в моем браузере я не вижу текущий идентификатор пользователя, где я не прав? Спасибо

Ответы [ 4 ]

3 голосов
/ 03 июня 2010

Когда пользователь зарегистрирован, запрос, переданный в качестве первого параметра вашего представления, имеет поле пользователя. Таким образом, по вашему мнению, вы будете знать, какой пользователь вошел в систему:

def userProfile(request):
    print request.user

В разделе Мои проекты я никогда не указываю имя пользователя в URL-адресах, поскольку пользователь уже известен в вашем коде.

2 голосов
/ 03 июня 2010

Вы можете установить свой LOGIN_REDIRECT_URL в представление, которое проверяет идентификатор текущего пользователя, вошедшего в систему. Это представление может затем перенаправить пользователя в правильное местоположение.

Логин -> Просмотр проверяет текущий идентификатор пользователя -> перенаправляет на правильную страницу, используя идентификатор пользователя

1 голос
/ 03 июня 2010

Один трюк для достижения этой цели - определить общее представление для всех и связать их с этим, тогда это представление может выглядеть следующим образом:

from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required

@login_required
def after_login(request):
    return HttpResponseRedirect('/accounts/private_profile/%d/'%request.user.id)

Но, как сказано в моем комментарии, это только если выочень хочу, чтобы идентификатор пользователя в URL, который в большинстве случаев вообще не нужен.Как вы можете видеть на мой взгляд, вы можете получить идентификатор пользователя из контекста запроса, при условии, что django.contrib.auth.context_processors.auth добавлено к настройке TEMPLATE_CONTEXT_PROCESSORS в settings.py

0 голосов
/ 03 июня 2010

Я так и сделал.

#========== Login View ==========#
def login(request):
   #==login stuff==#
   return HttpResponseRedirect('/accounts/private_profile/'+user.id+'/')

#========== PROJECT urls.py ==========#
urlpatterns = patterns('',
   (r'^accounts/', include('my_project.accounts.urls')),
   (r'^login/', login),
)

#========== ACCOUNTS APP urls.py ==========#
urlpatterns = patterns('',
   (r'^private_profile/(?P<id>\d+)/', private_profile),
)
...