작성
·
227
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 라고 생각하시면 됩니다.
실제로 함수이기 때문에 꼭 @ 와 같은 특수 구문을 사용하지 않고도 함수처럼 사용할 수도 있습니다.
그럼 왜 그냥 함수인데 이런 특이한 방식으로 사용하냐?라고 물을 수 있겠죠.
그 이유는 코드의 가독성을 높이기 위한 하나의 방법이라고 생각해주시면 좋을 것 같습니다.
강좌 들어주셔서 감사하고
좋은하루 보내시길 진심으로 바라겠습니다!
감사합니다-