我试图让我网站上的人根据他们所属的用户群访问网站的完全独立部分。这是我到目前为止所写的逻辑:
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组和A组。 B组 - 用户可以访问" A"页面和" B"如果页面属于相应的用户组,则相应页面。否则,他们必须登录(占位符拒绝页面)。
这种逻辑似乎有道理,但我不断得到太多的重定向"错误。实际上,页面实际上也是我想要的语句,但是当返回HttpResponseRedirect时,它就会停止工作。
非常感谢您的帮助。
答案 0 :(得分:4)
以下模式将匹配所有网址
url(r'', 'main.views.getIndex'),
因此,如果getIndex
返回重定向,您将获得无限重定向循环。
如果您只希望网址格式与索引网址匹配(即/
),请将其更改为:
url(r'^$', 'main.views.getIndex'),
插入符^
匹配字符串的开头,而美元$
匹配字符串的结尾。因此^$
仅匹配空字符串''
。相比之下,正则表达式r''
匹配所有字符串。
答案 1 :(得分:0)
好吧,我不知道你在a.urls
和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.urls
和b.urls
上的内容会很有用。
好吧,在我发布回复之后,我才看到答案。无论如何,也许它可以帮助某人。