Django

Django Seed(Response와 Serializer)

zhelddustmq 2024. 8. 29. 12:18

 

0. 기초작업

  • api_pjt 라는 이름의 프로젝트를 생성
  • articles 앱을 생성하고 기본적인 url 구조를 만듦
    • /api/v1/articles/로 들어오면 articles 앱의 urls로 연결
  • articles 앱의 models.py를 작성
    • Artcile 모델 클래스를 작성하고 아래 필드를 포함
      • title
      • content
      • created_at
      • updated_at

조회를 하려면 데이터가 필요

Django Seed :→ 매번 create하는 것도 너무 힘들기에 자동으로 많이 생성해주는 라이브러리

 

  1. install
    • pip install django-seed
    → freeze !
  2. settings.py
    INSTALLED_APPS = [
        "django.contrib.admin",
        "django.contrib.auth",
        "django.contrib.contenttypes",
        "django.contrib.sessions",
        "django.contrib.messages",
        "django.contrib.staticfiles",
        # Third-party
        "django_seed",
        # Local
        "articles",
    ]


  3. seeding: 더미데이터 생성
    python manage.py seed articles --number=30
  4. ModuleNotFoundError: No module named 'psycopg2' 에러 발생시
    pip install psycopg2


실제로 30개의 랜덤한 문자열로 채워진 데이터 생성ALT

 

Serialization: 직렬화

  • 객체 또는 데이터 구조를 저장, 전송을 위해 다른 포맷으로 변경하는 것
    → 데이터의 구조는 유지하면서 추후 재구성이 가능한 포맷으로 변환
  • 현재 Python 객체 형태인 Queryset 혹은 Model의 Instance를 전송 가능한 형태로 직렬화를 통해 JSON, XML, YAML 등의 형태로 변환하는 것
  • Django도 내부적으로 다른 데이터 포맷으로 쉽게 직렬화 할 수 있는 기능을 제공

Response 만들기

urls.py

from django.urls import path
from . import views

app_name = "articles"
urlpatterns = [
    path("html/", views.article_list_html, name="article_list_html"),
    path("json-01/", views.json_01, name="json_01"),
    path("json-02/", views.json_02, name="json_02"),
]

 

views.py

from django.core import serializers

def json_02(request):
    articles = Article.objects.all()
    res_data = serializers.serialize("json", articles)
    return HttpResponse(res_data, content_type="application/json")

Django는 위와 같이 내부적으로 serializer를 제공하지만 모델 구조에 한정된 구조

  • 직렬화된 데이터의 구조를 변경하거나 새로운 필드를 구성하는 것에 많은 추가 작업이 필요
  • 유연한 API를 위한 기능이라기보다 모델 구조로 저장되어있는 데이터를 내보내는 용도에 가까움.

⇒ 모델에 종속적이지 않고 유연하지만 사용하기 편한 Serializer의 필요함.(다음 글에서....)

 

'Django' 카테고리의 다른 글

DRF CBV  (0) 2024.08.29
DRF와 Postman (GET, PUT, DELETE, POST)  (0) 2024.08.29
장고 TemplateSyntaxError  (0) 2024.08.28
백엔드와 Django DRF, RESTful API  (0) 2024.08.23
Django Bootstrap, Fontawesome  (0) 2024.08.22