Django에선 편하게 restframework-simplejwt를 이용해서 jwt 인증을 구현할 수 있다. jwt에 필요한 기능은 아래와 같다. 로그인 토큰 유효성 검사 로그아웃 또한 우리는 Blacklist 를 포함해서 구현할 것이다. 설정 먼저 라이브러리를 설치한다. poetry를 사용하는 경우엔 poetry add를 하면 된다. pip install djangorestframework-simplejwt settings.py에 아래와 같이 추가한다. 라이브러리의 앱과 JWT 사용 옵션, 인증 클래스를 추가한다. INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.c..
django
Django를 운영하기 위해 로컬, 도커 환경을 분리하게 되었다. 먼저, settings.py를 분해해보자. 아직은 settings.py를 삭제하지 말고 먼저 settings 폴더 아래와 위와 같이 만들어준다. 각 파일은 아래와 같다. 각 환경 파일에서 base.py의 환경 파일을 import 받아 사용하는 구조이다. base.py: 기본 환경 파일 docker.py: 도커 환경 파일 local.py: 로컬 환경 파일 base.py를 아래와 같이 작성해준다. 시크릿 키에는 자신의 장고 프로젝트를 생성할 때 생성된 시크릿 키를 넣는다. from .base import * # noqa: F403, F40 DEBUG = False # SECURITY WARNING: keep the secret key used..
스키마를 만들다 보면 중복되는 필드가 많은 부분이 생기기 마련이다. 이런 스키마들은 보통 공통의 스키마를 만들고 상속 받아서 사용하곤 한다. 장고에서 추상 모델을 만들고 상속해서 만드는 방법은 아래와 같다. 추상 모델 추상화 하고자 하는 모델의 메타 클래스에 아래와 같이 abstract = True 옵션을 추가하면 해당 모델은 추상 모델이 된다. class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True class ..
API Document: https://docs.djangoproject.com/en/5.0/ref/models/querysets/ 장고의 orm이라 볼 수 있다. 그만큼 쿼리에서의 많은 메소드들을 지원한다. 공식 문서의 메소드 리스트를 일부 캡처한 모습이다. 자세한 내용은 위의 API 문서를 참고하자. 우리는 여기서 쿼리셋을 집중 탐구 해보도록 한다. QuerySet 쿼리셋은 데이터베이스를 통과하는 모든 것에 대한 구성, 필터, 슬라이스 등을 지원한다. Iteration Iterable의 성격을 가지고 있어 for 문에서 호출이 가능하다. for e in Entry.objects.all(): print(e.headline) 하지만 모든 것을 불러오는 메소드 이므로 한 개 이상일 때만 결과를 볼 수 있으..
장고에서 시리얼라이저를 사용하다 보니 어떤 필드들이 있는지 궁금해졌다. 그래서 공식 문서를 읽고 필드들을 기술해보려 한다. 공식 문서: https://www.django-rest-framework.org/api-guide/fields/#serializer-fields 많..다 너무 많다. 이만큼 다양한 필드의 직렬화를 제공하는 만큼 시리얼라이저가 강력한 기능임을 알 수 있다. 실제 라이브러리의 serializers.py를 보면 어떻게 매핑되어 사용되고 있는지, 해당 필드 안에선 어떻게 validation check를 하는지 등을 알 수 있다. Serializer fields 시리얼라이저는 원시 값들과 내부 데이터 타입 사이의 컨버팅을 조정하는 역할을 한다. 또한 입력 값의 유효성 검사와 부모 객체 값을 ..
Create와 Perform_Create 코드로 보기 장고의 ViewSet은 기본적으로 GenericAPIView라는 클래스를 상속 받기 때문에 'list', 'create', 'retrieve'와 'update', 'destory' 메소드를 자동으로 생성해준다. 여기서 create는 RestAPI의 post 메소드와 매칭되어 생성되는데 코드로 보면 아래와 같다. def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_succ..