• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

커스텀 데코레이터 질문(decorators.py)

22.02.13 18:56 작성 조회수 168

0

decorators.py 에서 decorator를 커스텀 할 때 

마지막의 return decorated는 정해 decorator 함수를 생성할 때 정해져 있는 규칙인가요??

def account_ownership_required(func):
def decorated(request, *args , **kwargs):
user = User.objects.get(pk=kwargs["pk"])
if not user == request.user:
return HttpResponseForbidden()
return func(request, *args, **kwargs)
return decorated

답변 1

답변을 작성해보세요.

1

안녕하세요!
질문 확인했습니다.

마지막 코드에 나와있는 return 문은 따로 정해진 규칙은 아닙니다.
그저 함수 내에 지정한 decorated 함수 자체를 리턴하는 방식입니다.

저희가 강좌에서 decorator ,
그러니까 적용하고자 하는 메서드 혹은 함수 선언 위에 @decorator 와 같은 형식으로 사용했지만,
결국 저희가 작성한 데코레이터는 그냥 함수입니다.

엄밀하게 말하면 하나의 함수를 받아서,
해당 함수를 감싼 새로운 함수를 되돌려 주는 함수가 
Decorator 라고 생각하시면 됩니다.

실제로 함수이기 때문에 꼭 @ 와 같은 특수 구문을 사용하지 않고도 함수처럼 사용할 수도 있습니다.

그럼 왜 그냥 함수인데 이런 특이한 방식으로 사용하냐?라고 물을 수 있겠죠.

그 이유는 코드의 가독성을 높이기 위한 하나의 방법이라고 생각해주시면 좋을 것 같습니다.

 

강좌 들어주셔서 감사하고
좋은하루 보내시길 진심으로 바라겠습니다!
감사합니다-