2009-11-27 3 views
1
from decorator import decorator 
from pylons.decorators.util import get_pylons 

def allowed_roles(roles): 
    def wrapper(func, *args, **kwargs): 
     session = get_pylons(args).session 
     # edit pylons session here. 
     return func(*args, **kwargs) 
    return decorator(wrapper) 

아무도 설명 할 수 있습니까? 다른 장식 작품처럼어떻게 파일런 데코레이터가 작동합니까?

+0

저에게는 이상한 것처럼 보입니다.'session'이 정의되었지만 결코 참조되지 않은 이유를 정말로 이해하지 못합니다. 아마도 바보 같은 것을 놓친 것 같습니다. –

+0

allowed_roles에 대한 인수'roles'도 사용되지 않습니다. ? – unutbu

답변

2

-

데코레이터는 인수로 함수를 수신하는 기능이며, 다른 함수를 반환합니다. 반환 된 함수는 원래 함수에서 "가져옵니다".

데코레이터를 사용하여 원하는 효과가 원래 함수 (장식 된 것) 전후에 일부 코드를 실행할 수 있기 때문에 데코레이터는 익명 및 명명 된 매개 변수 (* 접두어 "args"와 ** 접두사 "kwargs"는 각각 목록과 사전에 매개 변수를 저장합니다.)

이 새로운 기능에는 인증 코드를 쓸 수있는 곳이 있습니다. 이 컨텍스트에서 "func"라고하는 원래 함수를 호출하고 원래 값을 반환합니다.

"decorator.decorator"호출이 엄격하게 필요하지 않습니다. jsut은 래퍼 함수의 일부 ttrbitues를 수정하여 ('func_name'속성과 같이) 원래 funciton으로 더 가깝게 나타납니다. 그러나 코드는 작동해야합니다. 그것없이.

데코레이터를 정의한 후에 데코레이터를 원하는 함수 나 메소드에 적용해야합니다. 데코 레이트 할 함수 정의의 접두사 앞에 @allowed_roles를 추가하면됩니다.

+1

(시간 : 이것은 파이 런스에 특정한 것이 아닙니다.이 함수 나 메소드를 꾸미는 방법은 파이썬 특징입니다 – jsbueno

관련 문제