15

私の質問は一般的なものですが、特に私のアプリケーションは Django の login_required デコレーターです。

ビュー/関数に特定のデコレーター (この場合は login_required デコレーター) があるかどうかを確認する方法があるかどうか興味があります。

ユーザーをログアウトした後にリダイレクトしています。ユーザーが現在表示しているページに login_required デコレータがある場合は、メイン ページにリダイレクトしたいと考えています。私の検索では、これまで結果が得られませんでした。

4

2 に答える 2

16

独自のlogin_requiredデコレーターを作成し、関数を装飾済みとしてマークします。おそらく、マークを付けるのに最適な場所はfunc_dict.

from django.contrib.auth.decorators import login_required as django_l_r

# Here you're defining your own decorator called `login_required`
# it uses Django's built in `login_required` decorator
def login_required(func):
    decorated_func = django_l_r(func)
    decorated_func.func_dict['login_is_required'] = True
    return decorated_func

@login_required # Your decorator
def authenticatedd_view(request):
    pass

def unauthenticated_view(request):
    pass

これで、ビューがこのように装飾されたかどうかを確認できます...

# Assume `a_view` is view function
>>> a_view.func_dict.get('login_is_required',False)

Python デコレータについて混乱している場合は、この SO の質問/回答を参照してください:関数デコレータのチェーンを作成するには?

于 2011-03-30T17:36:02.577 に答える
2

あなたの状況は次のようです: 1. セキュリティで保護され、ログインが必要なデコレータの背後にあるページがあります。

私があなたの要件を理解している場合、ユーザーがログアウトしたときに、ユーザーをメイン ページ (ログイン状態と匿名状態の両方でアクセスできるウェルカム ページであると仮定します) にリダイレクトする必要があります。

ユーザーが安全なページからのみログアウトできるように制限し、ログアウト時にリダイレクト URL をようこそ画面に設定しないのはなぜですか?

于 2011-03-30T18:18:58.893 に答える