2010-06-03 33 views
1

网址我想在我的settings.py添加像声明:Django的重定向包含ID

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

,这样,当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/' 

错了,因为在我的浏览器我没有看到当前用户ID,W我在这里错了吗? 谢谢

+2

也许你可以详细阐述你正在努力完成的事情,因为这不容易完成。但是,登录后,您始终可以从请求上下文获取用户标识。那么为什么你在URL中需要它呢? – KillianDS 2010-06-03 11:12:10

+0

你是对的。这个id在我的网址中是没有必要的。我现在明白了为什么。谢谢! – dana 2010-06-03 11:44:09

回答

1

一个技巧来完成这将是定义一个通用视图为大家并将其连接到一个重定向到正确的页面,这种观点可能会再看看像:

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,这是大部分时间没有必要在所有的用户ID。正如你在我看来,你可以从请求上下文获得用户ID,只要django.contrib.auth.context_processors.auth被添加到TEMPLATE_CONTEXT_PROCESSORS setting.py

3

当用户登录时,作为您的视图的第一个参数传递的请求有一个用户字段。所以,在你看来,你就会知道哪些用户登录:

def userProfile(request): 
    print request.user 

在我projets,我从来没有在指定的URL的用户名,因为用户在代码中已知的。

+0

是的,现在我看到你是对的。我刚刚删除了ID参数,并且完美地工作。谢谢! – dana 2010-06-03 11:48:34

2

您可以将您的LOGIN_REDIRECT_URL设置为检查当前登录用户的ID的视图。该视图然后可以将用户重定向到正确的位置。

登录 - >查看检查当前用户ID - >使用用户ID

0

我这样做了。

#========== 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), 
) 
+0

非常感谢! 这也许是正确的,但如果你把这个id放在url中,你的应用程序就非常脆弱。如果它是公共应用程序,任何人都可以访问任何ID,只需更改网址即可。无论如何,它很难保证安全。阅读以上答案。他们帮了我很多。 – dana 2010-06-03 15:23:43

+0

您可以使用装饰器来检查用户是否经过身份验证。我有同样的问题: http://stackoverflow.com/questions/2958597/login-url-using-authentication-information-in-django – tsiokos 2010-06-03 15:31:47