Farklı işlevlerin, yalnızca oturum açmış kullanıcının gerekli izin düzeyine sahip olması durumunda yürütülebilir olmasını istiyorum.dekoratör işlevinin niteliklerini ayarlamak için
Hayatımı daha karmaşık hale getirmek için dekoratörler kullanmak istiyorum. Aşağıda, aşağıda gösterildiği gibi 'dekore edilmiş' işlevler üzerinde permission
özniteliğini ayarlamak için dikkatle çalışıyorum.
def permission(permission_required):
def wrapper(func):
def inner(*args, **kwargs):
setattr(func, 'permission_required', permission_required)
return func(*args, **kwargs)
return inner
return wrapper
@permission('user')
def do_x(arg1, arg2):
...
@permission('admin')
def do_y(arg1, arg2):
...
Ama ne zaman:
fn = do_x
if logged_in_user.access_level == fn.permission_required:
...
bir hata 'function' object has no attribute 'permission_required'
ben eksik olsun?
: sana [ 'functools.wraps'] (http://docs.python.org/2/library/functools.html#functools.wraps kullanmak istiyorum eminim) İşte. Sorununuzu doğrudan çözmemek için değil, ancak her işlev "iç", "(args, ** kwargs)" ifadesini aldığında, bu tür kodu hata ayıklamak imkansız olduğu için, 'yanlış kaynağa teftiş' – abarnert