0

ログインしていないユーザーは、@login_required()デコレータによってLOGIN_URL指定された にリダイレクトされますsettings.py。ここまでは順調ですね。しかし、私はそれを望んでいません。それらをリダイレクトする代わりに、ログインしていない人にエラーメッセージを表示したい.

これでうまくいくかもしれないと思ったのですが、TypeError: ios_login_required() takes exactly 1 argument (0 given)わかりません。これはデコレータですが、どのような引数が必要ですか?

def ios_login_required(f):
    def wrapper(request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponse("You need to be logged in.")
        else:
            return f(request, *args, **kwargs)
    return wrapper

デコレータを含むビューは次のようになります。

@ios_login_required()
def amiloggedinornot(request):
    return HttpResponse("Congrats, you are logged in!")

私が間違っていたアイデアはありますか?

4

1 に答える 1

1
@ios_login_required()
def amiloggedinornot(request):
    ...

# equals to 
def amiloggedinornot(request):
    ...
amiloggedinornot = ios_login_required()(amiloggedinornot)

ios_login_requiredパラメータが必要なときにパラメータなしで呼び出されることがわかりますf

したがって、次のようなものを試してください(()afterなし@ios_login_required):

@ios_login_required
def amiloggedinornot(request):
    ...

# which equals to
def amiloggedinornot(request):
    ...
amiloggedinornot = ios_login_required(amiloggedinornot)

Python デコレータの詳細については、こちらこちらをご覧ください。

さらに、user.is_authenticatedメソッドであり、ブール値の結果を得るために呼び出す必要があります。not user.is_authenticated常になりますFalse

于 2013-03-09T15:02:28.810 に答える