Decorator 이용한 페이지 권한 설정

Codren·2021년 5월 15일
0

Django 실전

목록 보기
6/12

Section 1. Decorator

1. Decorator

함수의 내부를 수정하지 않고 기능의 변화 또는 추가를 구현할 때 사용하는 기법으로 일반적으로 함수의 전처리후처리에 대한 필요가 있을때 사용한다.



2. Decorator 필요 상황

  • 함수의 시작과 끝을 알리도록 print 문을 출력하고자 할 때 아래 코드로 수행할 수 있다. 하지만 함수가 많다면 각 함수마다 매번 print 문을 앞 뒤로 삽입해야 되는 번거로움과 print 문이 아닌 다른 코드를 수행하려고 수정할 때 모든 함수를 바꿔야하는 상황이 발생한다.
def hello():
    print('hello 함수 시작')
    print('hello')
    print('hello 함수 끝')



3. Decorator 적용 코드

def decorator(func):				# 함수 자체를 매개변수로 받음	                 
    def wrapper():
        print(func.__name__, '함수 시작')   	# 전처리   
        func()                    		# 원래 함수 수행           
        print(func.__name__, '함수 끝')		# 후처리
    return wrapper 
    
@decorator    					# @데코레이터
def hello():
    print('hello')



4. Decorator 주의사항

  • hello() 함수의 매개변수가 없으면 wrapper() 또한 없음
  • hello(a,b,c) 함수의 매개변수가 존재하면 wrapper(a,b,c) 또한 동일한 매개변수를 갖어야함



Section 2. 페이지 권한 설정

1. 페이지 권한

  • 방문자 권한 - 로그인 하지 않아도 접근할 수 있는 페이지들에 대한 권한
  • 로그인 - 로그인을 해야만 접근할 수 있는 페이지들에 대한 권한
  • 관리자 권한 - 관리자만이 접근할 수 있는 페이지들에 대한 권한



2. User Model 수정

  • user 의 권한 level 을 추가
  • choices 는 속성의 도메인을 값을 선택할 수 있도록 지정
  • migration 시 default 값은 'user' 로 지정



3. Admin 페이지에서 권한 수정



4. Decorator 생성

  • user app 안에 decorators.py 생성
  • login_required - 로그인 상태인지 확인하는 전처리 데코레이터
  • admin_required - 관리자 권한인지 확인하는 전처리 데코레이터



5. Decorator 지정

  • 데코레이터를 클래스 내부에 있는 특정 함수로 바로 지정할 수 있도록 method_decorator 사용
    (from django.utils.decorators import method_decorator)
  • Class-based View 는 dispatch() 함수로 시작하기 때문에 해당 함수를 name 에 지정



6. Decorator 분류

  • login_required - 주문 목록, 주문하기
  • admin_required - 상품 등록

0개의 댓글