
만약 function마다 시작한 시간과 끝난 시간을 확인하고 싶을 때
print()구문 앞뒤에다가 시간을 출력해주게 된다.

하지만 이렇게 한다면 너무 일이 반복적으로 발생하게 된다. 즉, 가독성 떨어짐.
이럴 때 Decorator를 사용한다.


Decorator를 사용하지 않은 것과 사용한 것의 코드 차이.

이처럼 반복되는 요소들이 생각보다 많다.
이를 Decorator를 이용하여 줄여볼 예정이다.

hello_world 함수에 있는 else 구문을 Decorator를 사용해서 처리해보자.
@login_required 를 이용해서 Decorator 처리

이제 AccountUpdateView 에서 get과 post를 Decorator 처리해보자.

이 부분을 모두 지우고,

@method_decorator() 를 사용하여 decorator 처리
안에 인자는 아까 지정한 login_required 와 처리할 방식(get과 post)를 지정한다.
여기까지 decorator는 사용자 인증 시스템을 구축하지 않은 것이다.
따라서 사용자 인증 시스템까지 구축한 Decorator를 만들어준다.

이름은 account_ownership_required 이고 user와 request를 보낸 user가 같은지 확인하는 절차를 거치고 같지 않다면 forbidden, 같다면 정상적으로 func를 return 하는 구조이다.

사용자 인증 시스템까지 적용한 코드.
원래 기존의 코드와 동일하게 수행되는 decorator 적용 코드이다.
하지만 여기서 @method가 너무 많아서 조금 불편하다.

따라서 account_ownership_required 와 login_required를 배열화 시켜서 적용한다.
