0

引数を持つデコレータにするのが苦手な関数を持っています。だれかがこれを手伝ってくれませんか

def get_permission(request,permission_level):
    if has_permission(request,permission_level):#this is another function
        #my work will be done here
    else:
        raise Http404

そして、このように私の見解でそれを使いたいだけです

@get_permission(permission_level)
def a_view(request)

誰でもこれについて助けてもらえますか?ありがとう

4

1 に答える 1

0

django / contrib / auth/decorators.pyを見てください。

from functools import wraps
from django.utils.decorators import available_attrs

def get_permission(permission_level):
    def decorator(func):
        @wraps(func, assigned=available_attrs(func))
        def _wrapped(request, *args, **kwargs):
            if has_permission(request, permission_level): 
                'special logic goes here...'
                return func(request, *args, **kwargs)
            else:
                raise Http404

関数デコレータのチェーンを作成する方法を確認してください。デコレータを作成するためのPEP318

または、デコレータが返す結果を決定するための権限をチェックするだけの場合は、django / contrib / auth/decorators.pyを直接user_passes_test利用permission_requiredすることもできます。

于 2013-02-16T09:40:33.017 に答える