728x90
반응형
Decorator
- 파이썬(Python)에서 제공하는 기능
- 함수의 앞, 뒤로 붙어 실제 함수를 꾸며주는 기능
- 사용자가 코드 구현하기 편하도록 제공
장고에서도 Django Decorator를 제공 해주고 있는데 코드를 간소화 시켜주어 가독성을 높여주는 장점이 있다.
- 자세한 설명은 장고 document 참고
https://docs.djangoproject.com/en/3.2/topics/http/decorators/
인증 Decorator 구현
나만의 인증 decorator 생성
from django.contrib.auth.models import User
from django.http import HttpResponseForbidden
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
- 접근 user와 pk의 값이 같으면 접근 허가
- 인증되지 않은 user 접근 시 forbidden return
def에서의 decorator
@login_required
def hello_world(request):
- login_required 데코레이터를 함수 위에 선언
- login_required 는 장고에서 제공해주는 함수로 로그인을 했는지 안했는지 검증해줌
class에서의 decorator
# 배열에 담기
has_ownership = [account_ownership_required, login_required]
@method_decorator(has_ownership, 'get')
@method_decorator(has_ownership, 'post')
class AccountUpdateView(UpdateView):
model = User
context_object_name = 'target_user'
form_class = AccountUpdateForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'accountapp/update.html'
- 내가 만든 decorator 와 login_required 를 배열에 담아 method_decorator 설정
반응형
'Backend > Django' 카테고리의 다른 글
django 18. Profileapp 시작 그리고 ModelForm (0) | 2021.10.06 |
---|---|
django 17. superuser, media 관련 설정 (0) | 2021.10.06 |
django 15. Authentication 인증시스템 구축 (0) | 2021.10.06 |
django 14. DeleteView 기반 회원탈퇴 구현 (0) | 2021.10.06 |
django 13. UpdateView를 이용한 비밀번호 변경 구현 (0) | 2021.10.06 |