파이썬/Django
-
[Django] DRF Router(라우터) 동작 원리파이썬/Django 2022. 2. 13. 22:42
들어가며 DRF의 대표 클래스(ViewSet, Serializer, Router)중 하나인 Router의 종류와 동작원리를 알아본다. Router는 간단하고 빠르게 자동으로 url 라우팅을 할 수 있도록 해준다. from rest_framework import routers from apps.account. import views router = routers.SimpleRouter() router.register(r'users', views.UserViewSet) urlpatterns = router.urls 위와 같은 코드를 작성하면 ^users/$ ^users/{int: lookup}/$ 의 url패턴이 자동으로 생성된다. DRF에는 SimpleRouter, DefaultRouter 두 가지를 제공..
-
[Django] DRF Serializer(시리얼라이저) 동작 원리파이썬/Django 2022. 1. 24. 22:44
들어가며 DRF에서 주요 클래스(ViewSet, Router, Serializer) 중 하나인 Serializer의 동작 원리를 살펴본다. Serializer의 기능은 세 가지가 있는데 다음과 같다. 모델 객체 → 파이썬 네이티브 타입인 dict 타입 객체로 직렬화 dict 타입의 데이터를 validation dict 타입 → 모델 객체로 역 직렬화 validation 기능은 주로 역 직렬화 전에 dict 타입의 데이터를 검증해주는 기능으로 사용된다. 이 Seirlaizer의 세 기능을 각각 어떻게 동작하는지 알아본다. 1. Model → dict class UserSerializer(serializers.Serializer): username = serializers.CharField() passwor..
-
pydantic이란? (DRF Serializer를 대체할 수 있을까?)파이썬/Django 2021. 12. 14. 22:45
들어가며 pydantic은 타입 애너테이션을 사용해서 데이터를 검증하고 설정들을 관리하는 라이브러리이다. pydantic은 런타임 환경에서 타입을 강제하고 타입이 유효하지 않을 때 에러를 발생시켜준다. FastAPI, Project Jupyter, Microsoft, AWS 등 많은 곳에서 사용된다. pydantic의 기본과 간단한 사용법을 알아보고 DRF Serializer과 바교해보자 한눈에 보기 from datetime import datetime from typing import List, Optional from pydantic import BaseModel class User(BaseModel): id: int name = '홍길동' date_joined: Optional[datetime] =..
-
Docker + Django에 Gitlab-CI(Pytest) 붙이기파이썬/Django 2021. 10. 24. 13:05
Gitlab CI를 구성하기 위해서는 크게 GitLab runners 설정하기 장고 패키지 설치하기 프로젝트 최상위 디렉토리에 .gitlab-ci.yml 작성하기 로 이루어져 있습니다. 우선 GirLab runners에 대해 알아보겠습니다. GitLab Runners란? 빌드, 테스트, 배포 같은 일련의 작업들을 실행하는 애플리케이션 파이프라인에서 GitLab CI/CD와 함께 수행되는 애플리케이션 각 Runner는 사용 가능한 상태(작업이 없는)가 되면 GitLab 인스턴스에 계속해서 요청을 보내 작업들을 할당 받음 이 Runner는 세 가지로 구분되어 있습니다. 간단히 각 Runners의 정의를 살펴보면 Specific runners 하나의 프로젝트에 사용되는 러너 Shared runners GitL..
-
[Django] Django의 동작 원리와 과정 파헤치기파이썬/Django 2021. 10. 20. 09:38
Django 동작과정 WSGI Application 생성 settings에서 정의한 settings.MIDDLEWARE 로드 WSGI(uwsgi, gunicorn)에서 applcation call WSGI environ(request data를 담은 딕셔너리)과 함께 WSGIRequest 인스턴스 생성 미들웨어 체인에 WSGIRequest 인스턴스와 함께 call 미들웨어를 모두 거쳐간 후 최종적으로 view에 request가 전달되어 개발자가 정의한 로직을 거친 후 최종적으로 Response 반환 상세 보기 우리가 만든 장고 프로젝트 wsgi.py의 application 변수에는 callable한 WSGIHandler의 인스턴스가 반환된다. 이때 settings에 정의한 미들웨어를 로드한다. WSGi가..
-
Gunicorn 동작 과정 알아보기파이썬/Django 2021. 10. 10. 14:15
파이썬 웹 애플리케이션과 웹 서버 사이에 위치하는 Gunicorn 이라는 WSGI가 어떻게 동작하는지 알아본다. WSGI? Web Server Gateway Interface의 약자로 파이썬의 WAS이다. 어떻게 Gunicorn이 내 장고 애플리케이션을 동작시키는지? WSGI서버와 이 WSGI로 동작하기 위한 애플리케이션 사이에 지켜지는 hook들이 있는데 이 hook을 가지고 wsgi서버가 애플리케이션을 실행시킴 import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_defaults.settings") application = get_wsgi_appli..
-
[Django] GenericForeignKey파이썬/Django 2021. 5. 23. 10:25
class Category(models.Model): name = models.CharField(max_length=100) class Meta: verbose_name_plural = 'Categories' class Hero(models.Model): name = models.CharField(max_length=100) category = models.ForeignKey('Category', on_delete=models.CASCADE) class Villian(models.Model): name = models.CharField(max_length=100) category = models.ForeignKey('Category', on_delete=models.CASCADE) 이렇게 두개의 모델을 ..
-
[Django] RestFramework 페이지네이션 종류파이썬/Django 2021. 5. 5. 23:32
모든 DRF Pagination 추상 클래스 BasePagination을 상속 받는다. 1. PageNumberPagination page_query_param과 page_size_query_param을 사용해서 페이지네이션하는 가장 기본적인 방법 기본적으로 장고의 Paginator를 사용한다. 주어진 쿼리셋에서 [(페이지넘버 - 1) * 페이지사이즈:(페이지넘버 - 1) * 페이지사이즈 + 페이지사이즈] 를 슬라이싱하여 페이지네이션된 쿼리셋을 반환한다. 데이터를 조회할 때 select * from article limit 10 offset 20 같은 식으로 조회를 한다. 따라서 쿼리에서 limit은 페이지사이즈가 되고 offset은 (페이지넘버 -1) * 페이지사이즈 가 된다. 2. LimitOffse..