개요 Django에서 ImageField를 사용하면 이미지 데이터를 url로 관리할 수 있다. 하지만 저장을 할 때 이미지 파일의 크기를 변경하거나 회전 처리를 하는 등 추가 작업을 진행해야 할 수도 있다. 이럴때는 어느 부분을 건드려야 할까? 구현 첫번째 방법, 저장 후 불러오기 첫번째로 생각해볼 수 있는 방법은 다음과 같다. 원본 파일을...
DRF의 페이지네이션(Pagination)
개요 API 호출 중에는 테이블 내 전체 데이터를 불러오는 작업이 있다. 하지만 테이블 내 데이터가 수백개, 수천개가 된다면 한번의 호출로 너무 많은 데이터가 전송 될 것이다. DRF 페이지네이션 공식 문서 DRF에서는 이를 페이지 단위로 해결하기 위한 페이지네이션을 제공한다. 기본적으로 제공되는 페이지네이션 클래스는 다음과 같다. API 레퍼런...
Django ORM의 참조에 사용하는 related_name
개요 Django를 사용하다 보면 연관된 객체를 가져와야 할 상황이 자주 일어난다. 예를 들어 다음과 같은 모델을 생각해 보자 Post - (id, title, context) Comment = (id, post, context, author) 위와 같은 구조에서 Comment 객체는 Post 객체를 ForeignKey로 가지고 있다. 이...
Django에서 다중 업데이트 구현
개요 기본적으로 DRF에서는 ViewSet을 사용한다. 다른 프레임워크의 Recources 또는 Controllers가 해당 기능과 유사하다고 할 수 있다. 기존 Django의 View에서는 get, post와 같은 function으로 HTTP 메소드 요청을 처리한다. 하지만 DRF의 ViewSet은 HTTP 메소드에 대한 핸들러를 제공하는 것이 아...
Django에서 다중 업데이트 구현
개요 최근 작업을 진행하면서 동시에 여러 개체를 수정해야 하는 상황이 생겼다. 프론트 개발자의 요청 상황은 다음과 같다. post 모델의 여러 행이 가진 태그를 동시에 수정하고 싶다. 특이한 기능이니까 extra-action을 사용해야 겠다는 점은 알 것 같다. 하지만 어떻게 하면 구현할 수 있을까? DRF의 ListModelMixin의 ...
Django의 DRF 라우터
개요 기존의 Django에서 각 기능에 대한 라우팅은 다음과 같다. from django.urls import path from . import views urlpatterns = [ path('posts/', views.PostView), ] 위와 같이 라우터를 사용하지 않는다면, 각각의 URL에 view를 연결해주어야 할 것이다. 위 예시...
Django에서 모듈화하기
개요 Django는 하나의 Project와 많은 App의 형태로 구현된다. 하지만 RESTful API로 사용된다면 어떨까? 굳이 그렇게 만들 필요가 있을까? 특정 모델은 하나의 앱에서만 쓰이지는 않는다. 예를 들어 태그와 같은 정보는 글에 대한 태그, 댓글에 대한 태그, 이미지에 대한 태그 등 여러 부분에서 겹쳐 사용된다. 기존의 Django 구...