Decorator
:파이썬에서 제공하는 코드를 줄이는 기능.
@login_required
def hello-world(request):
if ...
Python
복사
로그인을 안 했을 시, 똑같이 로그인 창으로 리다이렉트 되는걸 확인할 수 있다
@method_decorator(login_required, 'get')
@method_decorator(login_required, 'post')
class AccountUpdateView(UpdateView):
model = user ...
Python
복사
class처럼 메소드에 데코레이터를 추가할 시, 데코레이터를 메소드에 맞게 변환해주는 method_decorator를 사용한다.
Custom Decorator
Accountapp 내부에 decorators.py를 만들어준다.
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
Python
복사
user와 request를 보낸 user의 pk가 같은지 확인하고, 아니라면
return HttpReponseForbidden을 리스폰스한다.
맞는 경우엔 return func(request, *args, **kwargs) 해준다.
has_ownership = [account_ownership_required, login required])
Python
복사
라고 넣어주면, 리스트 내의 모든 데코레이터를 확인해준다.