본문 바로가기

Django/Django Rest Framework24

24. DRF JWT 사용하기 JWT Setting simplejwt를 설치한다. 기존 djangorestframework-jwt는 더 이상 업데이트 되지 않는다. $ pip install djangorestframework-simplejwt JWT로 인증을 할것이기 때문에 settings.py에 REST_FRAMEWORK의 인증 방식을 추가해준다. #settings.py 'DEFAULT_AUTHENTICATION_CLASSES': [ ... # JWT 인증 방식 추가하기 'rest_framework_simplejwt.authentication.JWTAuthentication', ], simplejwt에서 제공하는 기본 JWT 인증을 사용한다. 따라서 인증 토큰 발근 urlpatterns에 토큰 발급 view를 추가해준다. #user.. 2022. 7. 18.
23. DRF JWT란 Session 인증 방식 브라우저에서 사용자가 인증(Authentication)을 수행하면 서버에서는 사용자의 정보를 저장하고 그 응답으로 JESSIONID라는 키를 이용해 클라이언트(사용자) 브라우저의 쿠키에 세션 정보를 저장한다. 이후 클라이언트는 브라우저 쿠키에 저장된 JESSIONID로 저장된 세션 정보를 이용해 인가(Authorization)된 정보에 접근할 수 있게 된다. Token 인증 방식 사용자가 인증을 수행하면 서버에서 토근을 생성 후 저장하지 않고(stateless) 토큰값을 사용자의 브라우저에 응답한다. 발급된 토큰을 사용자가 인가된 사용자만 사용할 수 있는 서비스를 요청할 때 함께 보내게 되고, 서버에서 이 토큰을 의미 있는 값(ex. 사용자 정보)으로 해석하게 된다. 그리고 이 .. 2022. 7. 18.
22. Django DRF serializer 심화 / updater serializer를 사용해 기존 데이터들 쉽게 업데이트 할 수 있다. 가입된 유저의 정보를 바꾸는걸 해보겠다. #views.py class UserView(APIView): #put과 비교용 def post(self, request): user_serializer = CustomUserSerializer(data=request.data) if user_serializer.is_valid(): user_serializer.save() return Response({"message": "정상"}, status=status.HTTP_200_OK) return Response(user_serializer.errors, status=status.HTTP_400_BAD_REQUEST) def put(self, r.. 2022. 6. 22.
21. Django DRF serializer 심화 / validator serializer에는 데이터 직렬화 외에도 data validation, create, update 기능을 사용할 수 있다. 다른 말로 프런트앤드(포스트맨)에서 request를 보내주면 데이터가 유효한지 검증하고 생성 및 업데이트를 할 수 있다. validator serializer에서는 기본적으로 Meta class 내부 field에 포함되어 있는 항목에 맞게 validate를 진행한다. 예시 #views.py class MakeArticle(APIView): def post(self, request): user = request.user request.data['author'] = user.id article_serializer = ArticleSerializer(data=request.data) .. 2022. 6. 21.
20. Django DRF Q Q를 사용하면 쿼리에 and, or을 적용시킬 수 있다. from django.db.models.query_utils import Q class UserView(APIView) def get(self, request): # 취미 중 산책이 있거나 나이가 19살보다 많고 김씨인 사람만 필터 사람만 필터 qyery = Q(hobby__name="산책") | Q(age__gt=19, user__name__startswith="김") # 취미 중 산책이 있으면서 나이가 19살보다 많은 사람만 필터 qyery = Q(hobby__name="산책") & Q(age__gt=19) user_profile_list = UserProfileModel.objects.filter(qyery) #요런식으로도 활용 가능 titl.. 2022. 6. 21.
19. Django DRF orm 심화 orm을 활용하여(다양한 데이터 검색 문법을 활용해) 원하는 값을 찾아낼 수 있다. get, filter, exclude를 사용해 검색시 다양한 Field lookups 문법을 사용할 수 있다. get : 매칭되는 데이터를 가져온다 filter : 조건에 맞는 데이터를 가져온다 exclude : 조건에 맞는 데이터를 제외하고 전부 가져온다 Field lookup은 무조건 under bar 2개를 작성해주고 해야된다.(__) contains : 특정 string이 포함된 object 찾기 startwiths / endswith : 특정 string으로 시작하는 / 끝나는 object 찾기 gt / lt / gte / lte : 특정 값보다 크거나 / 작거나 / 크거나 같거나 / 작거나 같은 object 찾.. 2022. 6. 20.
18. Django DRF permission_classes/admin, 사용자 별 권한 설정 from rest_framework.permissions import BasePermission from rest_framework.exceptions import APIException from rest_framework import status class GenericAPIException(APIException): def __init__(self, status_code, detail=None, code=None): self.status_code=status_code super().__init__(detail=detail, code=code) class IsAdminOrIsAuthenticatedReadOnly(BasePermission): """ admin 사용자는 모두 가능, 로그인 사용자는 조회.. 2022. 6. 20.
17. Django DRF admin 페이지 심화 기본 admin 상태로 하면 다음과 같이 비밀번호가 보안화 되지 않고 오는 것을 확인 할 수 있다. 이로 인해 로그인이 되지 않는 문제가 발생하는데 이를 수정할것이다. from django.contrib import admin from user.models import User as UserModel from user.models import UserProfile as UserProfileModel from user.models import Hobby as HobbyModel from django.contrib.auth.admin import UserAdmin as BaseUserAdmin # Register your models here. class UserAdmin(BaseUserAdmin): lis.. 2022. 6. 20.
16. Django DRF permission_classes를 활용한 접근 권한 설정 view에 접근 할 수 있는 요청을 drf의 permission_classes를 활용해 관리 할 수 있다. permissions.AllowAny : 모든 사용자를 대상으로 접근 허용 permissions.IsAuthenticated : 로그인 된 사용자를 대상으로 접근 허용 permissions.AllowAny : 모든 사용자를 대상으로 접근 허용 이외에도 다양한 permission class들이 존재 Custom permission 만들기 보통 permission의 경우 하나의 app에서 사용하는게 아닌 프로젝트 전체에서 사용되는 경우가 많아서 프로젝트 app에서 permissions.py를 만들어준다. 그리고 기존 permissions.py에서 마음에 드는거 아무거나 가져와서 붙여주고 views.py.. 2022. 6. 19.