인프런 커뮤니티 질문&답변

kiwon Jun님의 프로필 이미지
kiwon Jun

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

Decorator를 이용한 코드 간소화

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

작성

·

223

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

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

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

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

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

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

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

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

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

 

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

kiwon Jun님의 프로필 이미지
kiwon Jun

작성한 질문수

질문하기