728x90
    
    
  반응형
    
    
    
  Decorator
- 파이썬(Python)에서 제공하는 기능
- 함수의 앞, 뒤로 붙어 실제 함수를 꾸며주는 기능
- 사용자가 코드 구현하기 편하도록 제공
장고에서도 Django Decorator를 제공 해주고 있는데 코드를 간소화 시켜주어 가독성을 높여주는 장점이 있다.
- 자세한 설명은 장고 document 참고
https://docs.djangoproject.com/en/3.2/topics/http/decorators/
View decorators | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
인증 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 |