오늘 한 것
[O] : 백준 통계학 페어프로그래밍
[△] : AWS듣기 : 끝까지 듣고싶었는데 다 못들었다.
[O] : 후발대 강의 7시 : permission / admin 조정하기
후발대 강의!
> 장고 permission +이후 공부 더 해서 내용 추가하기
장고 rest_framework 내장 기능
뷰가 많아졌을때 하나하나 사용자 유효성 검증 코드를 적어주기는 힘드므로 내장기능이 준비되어있는 것임
이때 사용하는 것이 permission_class
- permission 활용
이전 과제를 바탕으로 강의가 진행되었다.
Todo는 어떤 사용자가 작성했는지를 알고있다 = Foreignkey로 받고있으므로!
if not request.user.is_authenticated:
# 사용자가 인증된 사용자인지 True or False
return Response({“message”:’로그인 필요!’})
is_anonymous 로 검증도 가능 (is_authenticated와 반대로 생각하면 된다)
permission class 종류 .. 이외에도 여러 가지가 있다!
- permissions.AllowAny : 모든 사용자를 대상으로 접근 허용
- permissions.IsAuthenticated : 로그인 된 사용자를 대상으로 접근 허용
- permissions.IsAdminUser : admin 사용자를 대상으로 접근 허용
- permissions.IsAuthenticatedorReadOnly 인증되지 않았으면 읽기만 허용
#views.py
class ~~View():
permission_classes = [IsAuthenticated]
#settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
],
여기에서 지정할수도 있다. “rest_framework.permissions.IsAuthenticated” AllowAny 등
View에 설정된 것이 우선순위를 높게 가진다.
- permission 커스텀 하기
root 폴더에 permissions.py 만들어서 BasePermision을 상속해서 권한을 수정할 수 있다
#기본 class
from rest_framework.permissions import BasePermission
class IsAuthenticated(BasePermission):
"""
Allows access only to authenticated users.
"""
def has_permission(self, request, view):
return bool(request.user and request.user.is_authenticated)
아래는 커스텀 permissions 클래스.
요청 유저의 정보를 검증하고 20세 이상의 조건으로 boolean값을 가져와 구분한다.
이외에도 조건은 다양하게 만들어 커스텀 할 수 있다 (ex. 가입일, 나이, VIP, admin계정 등등)
#이런식으로 원하는 방법으로 개변하여 사용할 수 있다
class IsAuthenticatedandAdultOnly(BasePermission):
"""
Allows access only to authenticated users.
"""
message = “20세 이상만 접근할 수 있습니다”
def has_permission(self, request, view):
if bool(request.user and request.user.is_authenticated) and (request.user.age <= “20”):
return True
else:
return False
아래는 가입일이 일주일 지나야 접근할 수 있도록 커스텀한 코드.
#가입일로 점검 예시
class IsAuthenticatedAndRegistedMoreOneWeek(BasePermission):
"""
Allows access only to authenticated users.
"""
message = “가입 후 1주일 지난 사용자만 접근할 수 있습니다”
def has_permission(self, request, view):
#join date = 0504
#target date = 0427
if bool(request.user and request.user.is_authenticated) and (request.user.join_date < timezone.new() - timedelta(days=7)):
#timezone.now() - 230504
#timedelta(days=7) 7일 빼겠다
#timezone.now - timedelta(days=7) 230427
return True
else:
return False
def has_permission(self, request, view):
return bool(
request.method in SAFE_METHODS or
request.user and
request.user.is_authenticated
)
SAFE_METHODS 는 큰 의미는 없고...!! 장고 네이밍임
코드를 어떻게 짜느냐에 따라서 가져오는 내용이 달라질 것임.
보통 get 요청에서 쓰이므로 여기에서는 get요청으로 보면 된다...
+ 나머지 내용은 추가
GenericAPIException
느낀점 :
docs를 열심히 읽자!
'AI 웹개발반' 카테고리의 다른 글
[TIL] JS CRUD 공부 중... (0) | 2023.05.11 |
---|---|
[TIL] DRF 팀프로젝트 기능 구현 중 : imagefield, tag, 이메일인증 (0) | 2023.05.10 |
[TIL] itertools. permutations, combinations 순열과 조합 (0) | 2023.05.03 |
[python] 객체 지향 특강 + homework (0) | 2023.05.01 |
[TIL] 장고 Serializer 활용 + 개인과제 해설 (2) | 2023.05.01 |