관련글
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줄로 축약.
'기술 기록 > Python,Django' 카테고리의 다른 글
파이썬PS) 백준 14729 칠무해 - 최대힙 사용 (0) | 2022.07.04 |
---|---|
error, 파이참버그) ValueError: invalid literal for int() with base 10: '' / 파이참 인풋 버그 (0) | 2022.05.30 |
파이썬PS) 백준 6603 로또. 백트래킹 (0) | 2022.04.12 |
파이썬PS) 백준 7568 덩치 (0) | 2022.03.29 |
파이썬) 객체 리스트의 다중 정렬 (백준 10825) (0) | 2022.03.27 |
댓글