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:

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 (つまり ) だけに一致させたい場合は、次の/ように変更します。

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

キャレット^は文字列の先頭に一致し、ドル$は文字列の末尾に一致します。したがって^$、空の文字列にのみ一致します''。対照的に、正規表現はr''すべての文字列に一致します。

于 2013-01-27T00:38:21.900 に答える
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

回答を投稿した後、回答が表示されます。とにかく、それは誰かに役立つかもしれません。

于 2013-01-27T01:00:16.623 に答える