본문 바로가기
기술 기록/Python,Django

Django ) 데코레이터를 이용한 유저 검증

by Fola 2022. 5. 16.

관련글

2022.05.16 - [프로젝트/Django - How Dimt?] - Django poj.c B16) Security logic - 403 forbidden - 28일차

 

 

 

 

views.py 에서 모델 객체 변경을 요청하는 유저의 권한을 체크하는 3가지 코드

 

 

 

 

1. CBV에서 'GET' 요청과 'POST' 요청을 처리하는 함수를 오버라이드

 

 

GET' 또는 'POST' 요청을 처리하는 함수가 콜 되었을 때

- 로그인이 되어있지 않거나

- 객체의 작성자와 request에 담겨있는 로그인 user가 같지 않을 경우

403 forbidden를 raise

 

CBV에서 REST 요청이 들어왔을 때 내가 원하는 로직을 추가하는 방법.

매우 중요!!

 

 

 

 

 

2. Decorator를 이용한 검증 (기존 오버라이드 방식의 코드는 삭제)

 

 

 

 

 

Django에서 제공하는 login_required 데코레이터를 사용하여 로그인 여부를 확인.

파라미터로 로그인 페이지 url를 명시해주지 않으면 accounts/ 로 시작하는 default 경로로 넘어가니 주의.

 

post_ownership_required(func)라는 이름의 커스텀 데코레이터 함수를 작성하였다.

 

함수A 위에 어노테이션을 남기면(함수D)

어노테이션 아래의 함수A는 데코레이터 함수D의 인자로 들어가

추가적인 로직을 거쳐 함수A' 가 된다.

 

반복되는 함수를 심플하게 표현할 수 있다.

 

 

 

주의) 데코레이터는 적용할 타깃이 def 함수 / class에 따라 표기 방식이 다르다.

 

데코레이터 어노테이션은 def 함수 위에 @함수명 으로 표기한다.

 

클래스에 데코레이터를 적용할 때는 

타깃 클래스 위에 @method_decorator(함수명) 으로 한번 포장해서 표기하여야 한다. 

 

 

 

 

 

3. Decorator 축약 (최종)

 

 

 

 

@method_decorator() 의 인자 값들을 배열에 담아 던지는 방법으로

4줄의 코드를 2줄로 축약.

댓글