SW개발/Django
[Django]DRF SerializerMethodField() 란?
SerializerMethodFiled() 란? 연결되어 있는 serializer 클래스에서 메서드를 호출하여 값을 가져올 수 있는 읽기 전용 필드이다. 객체의 serializer 된 표현에 모든 종류의 데이터를 추가하는데 사용할 수 있다. 언제 사용해야 하나요? 객체를 serializer 할 때 모델에 없는 필드를 추가하고 싶거나, 모델에 있는 값을 변형해서 새로운 필드의 값으로 넣고 싶을 때 SerializerMethodField()를 사용하면 된다. 어떻게 사용해야 하나요? User 객체의 모델에는 full_name 필드만 있다고 가정하자. # Serializer된 User 객체 "id" : 1, "full_name" : '{"first_name": "Yoon", "last_name": "Jun K..
[Django]FBV vs CBV (함수형 뷰 vs 클래스형 뷰)
Django는 MTV(Model - Template - View)패턴을 기반으로 하는 프레임 워크이다. 여기에서 V에 해당하는 view를 작성하는 방법에는 두 가지가 존재한다. 함수형 뷰 (Function based view) 클래스형 뷰 (Class based view) FBV 란? 뷰를 작성할 때 함수 형식으로 작성하는 방식이다. 아래와 같이 간단하게 뷰 로직을 작성할 수 있다. # urls.py urlpatterns= [ path('', views.index, name='index'), ] # views.py @api_view(['GET', 'POST']) def index(request): if request.method == 'POST': return HttpResponse("Post metho..
[Django]Django ORM, 실수하기 쉬운 Queryset의 특징
Django ORM을 작성하다보면 종종 당연히 '이렇게 수행 될거야' 라고 생각하지만 실제로는 그렇지 않은 부분들이 꽤 많이 존재한다. 이번 포스팅에서는 놓치기 쉽고 실수하기 쉬운 queryset의 특징들에 대해 다루어보려고 한다. 다음과 같은 순서로 설명을 진행하려고 한다. queryset 캐시를 재활용하지 못하는 queryset 호출 prefetch_related() 와 filter()의 올바른 사용법 서브쿼리가 발생하는 조건 values(), values_list() 사용시 주의점 Queryset 캐시를 재활용하지 못하는 queryset 호출 >>> blog_list = list(Blog.objects.prefetch_related('category').all()) SELECT "mysite2_bl..
[Django]예제를 통해 알아보는 Django ORM이 호출하는 SQL의 구조 (feat. select_related, prefetch_related)
이번 포스팅에서는 다양한 예시 ORM을 통해 실제로 생성되는 SQL에 대해 알아볼 것이다. 지난 포스팅에 이어 select_related(), prefetch_related() 를 중점으로 다룰 것이다. 또한, ORM이 생성하는 SQL 구조는 어떻게 되는지, 추천하는 ORM 옵션 작성 순서는 무엇인지에 대해서도 같이 알아보려고 한다. models.py from django.db import models class Blog(models.Model): name = models.CharField(max_length=50) class Category(models.Model): blog = models.ForeignKey(Blog, on_delete=models.CASCADE, related_name='categ..
[Django]Django select_related() 와 prefetch_related()
이번 포스팅에서는 Queryset의 심화 부분인 select_related() 와 prefetch_related()에 대하여 알아볼 것이다. 먼저 장고에서는 Queryset이 어떻게 구현 되어있는지 알아볼 필요가 있다. Queryset은 크게 1개의 메인 쿼리와 0~N 개의 서브 쿼리들로 구성이 되어있다. django.db.models.query.py class QuerySet: """Represent a lazy database lookup for a set of objects.""" def __init__(self, model=None, query=None, using=None, hints=None): self.model = model self._db = using self._hints = hints..
[Django]Django ORM과 QuerySet의 특징 (LazyLoading, Caching, EagerLoading)
이번 포스팅에서는 장고를 사용하게되면 필연적으로 접할 수 밖에 없는 Django의 ORM과 QuerySet의 특징에 대해 알아보려고 한다. 그 중에서도 LazyLoading, Caching, EagerLoading에 대해 알아볼 것이다. 이를 위해서 ORM이 무엇이고 왜 사용하는지에 대해 간략하게 알아보고 넘어갈 것이다. ORM 이란? Object Relational Mapping (객체-관계 매핑) 객체와 관계형 데이터베이스를 자동으로 매핑(연결) 해줌 데이터베이스 ↔ Object (객체를 통해 데이터베이스의 필드를 다룸) ORM을 사용하는 이유 ORM은 위에서 설명한 것과 같이 객체를 통해 데이터 베이스를 다룰 수 있는 기술을 의미한다. ORM을 사용함으로써 얻을 수 있는 장점과 단점들은 아래와 같다..
[Django]Django REST Framework 튜토리얼 6 (ViewSets & Routers)
이번 포스팅에서는 DRF의 ViewSets & Routers 공식 문서를 공부하면서 번역해보려고 한다. 해석에 틀린 내용이 있을 수 있으니 이해가 안가는 부분은 아래의 공식문서를 참조하기 바란다. DRF ViewSets & Routers 공식 Documentation 6 - Viewsets and routers - Django REST framework REST framework includes an abstraction for dealing with ViewSets, that allows the developer to concentrate on modeling the state and interactions of the API, and leave the URL construction to be hand..
[Django]Django REST Framework 튜토리얼 5 (Relationships & Hyperlinked APIs)
이번 포스팅에서는 DRF의 Authentication & PermissionsRelationships & Hyperlinked APIs 공식 문서를 공부하면서 번역해보려고 한다. 해석에 틀린 내용이 있을 수 있으니 이해가 안가는 부분은 아래의 공식문서를 참조하기 바란다. DRF Relationships & Hyperlinked APIs 공식 Documentation 5 - Relationships and hyperlinked APIs - Django REST framework At the moment relationships within our API are represented by using primary keys. In this part of the tutorial we'll improve the ..
[Django]Django REST Framework 튜토리얼 4 (Authentication & Permissions)
이번 포스팅에서는 DRF의 Authentication & Permissions 공식 문서를 공부하면서 번역해보려고 한다. 해석에 틀린 내용이 있을 수 있으니 이해가 안가는 부분은 아래의 공식문서를 참조하기 바란다. DRF Authentication & Permissions tutorial 공식 Documentation 4 - Authentication and permissions - Django REST framework Currently our API doesn't have any restrictions on who can edit or delete code snippets. We'd like to have some more advanced behavior in order to make sure tha..
[Django]Django REST Framework 튜토리얼 3 (Class-based Views)
이번 포스팅에서는 DRF의 Class-based Views 공식 문서를 공부하면서 번역해보려고 한다. 해석에 틀린 내용이 있을 수 있으니 이해가 안가는 부분은 아래의 공식문서를 참조하기 바란다. DRF Class-based Views tutorial 공식 Documentation 3 - Class based views - Django REST framework We can also write our API views using class-based views, rather than function based views. As we'll see this is a powerful pattern that allows us to reuse common functionality, and helps us keep ..