meong_j
기록하는 습관.
meong_j
전체 방문자
오늘
어제
  • 분류 전체보기 (176)
    • 개인 공부 정리 (0)
    • 서버 운영 (37)
      • Linux (36)
    • Frontend (11)
      • Vue.js (10)
    • Backend (70)
      • Java (4)
      • Python (22)
      • Django (38)
      • Spring (6)
    • Database (5)
      • Oracle (4)
      • MySQL (1)
      • MariaDB (0)
    • Android (14)
      • Kotlin (6)
    • 배포 (9)
      • Docker (8)
      • AWS (1)
    • IT_study (29)
      • Coding test (17)
      • 알고리즘 (5)
      • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

인기 글

반응형

태그

  • 안드로이드adaptor
  • django
  • 배포인프라
  • 리눅스방화벽
  • router-link
  • Kotlin
  • Proxy
  • SASS Variables
  • gabagecollecter
  • docker
  • 이차원배열정렬
  • dockersecret
  • 중첩라우트
  • 개발자도서
  • cpu사용률
  • dp #알고리즘
  • 테크커리어
  • DHCP
  • 코틀린자료형
  • 리눅스인증

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
meong_j

기록하는 습관.

Backend/Django

django 16. Decorator를 이용한 코드 간소화

2021. 10. 6. 15:23
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
    'Backend/Django' 카테고리의 다른 글
    • django 18. Profileapp 시작 그리고 ModelForm
    • django 17. superuser, media 관련 설정
    • django 15. Authentication 인증시스템 구축
    • django 14. DeleteView 기반 회원탈퇴 구현
    meong_j
    meong_j
    #it #개발일기 #개발공부 #개발자 #백앤드 #생각정리 #시간은 실력에 비례한다 #뭐든지 꾸준히 열심히 #오늘의 내가 내일의 나를 만든다

    티스토리툴바