2

我试图让我网站上的人们根据他们所属的用户组访问网站的一个完全独立的部分。这是我到目前为止写的逻辑:

if request.user:
    if request.user.groups.filter(name='A').count() >= 1:
        return HttpResponseRedirect('/pageA')
    elif request.user.groups.filter(name='B').count() >= 1:
        return HttpResponseRedirect('/pageB')
else:
    return HttpResponseRedirect('/login')

然后是网址:

url(r'', 'main.views.getIndex'),
url(r'', include('a.urls')),
url(r'', include('b.urls')),

所以基本上,我有 A 组和 B 组——如果他们属于各自的用户组,用户可以相应地访问“A”页面和“B”页面。否则,他们必须登录(占位符拒绝页面)。

逻辑似乎是有道理的,但我不断收到“重定向过多”的错误。事实上,页面实际上也得到了我想要的语句,但是在返回 HttpResponseRedirect 时,它停止工作。

非常感谢您的帮助。

4

2 回答 2

5

以下模式将匹配所有url

url(r'', 'main.views.getIndex'),

因此,如果getIndex返回重定向,您将获得无限重定向循环。

如果您只希望 url 模式与索引 url (ie /) 匹配,则将其更改为:

url(r'^$', 'main.views.getIndex'),

插入符号^匹配字符串的开头,美元$匹配字符串的结尾。因此^$只匹配空字符串''。相比之下,正则表达式r''匹配所有字符串。

于 2013-01-27T00:38:21.900 回答
0

好吧,我不知道你在a.urlsand中有什么代码b.urls,但我会给你我应该应用重定向时几乎总是使用的方式。当然,这只是您可以拥有的一种新方式。例如,假设您有以下条目a.urls

from django.conf.urls.defaults import *


urlpatterns = patterns('appA.views',
    url(r'^pageA/$', 'pageA_view', name='pageA'),
)

you can apply this:

from django.shortcuts import redirect

# In your code
if request.user.groups.filter(name='A').count() >= 1:
    return redirect('pageA')

这是完成此任务的另一种方式。您也可以遵循您的想法,但为了更好地理解,查看您的a.urlsb.urls.

好吧,我只是在发布回复后才看到答案。无论如何,也许它可以帮助某人。

于 2013-01-27T01:00:16.623 回答