DRF 2-4 ModelSerializer를 상속한 CRUD

Grace Goh·2022년 10월 25일
0

Django Rest Framework

목록 보기
4/36

Serializer 이용해서 DB 정보를 json 형태로 front에 불러오기.
json을 돌려주는 backend를 만든 것.

> front에서는 이 data를 받아서 JS로 읽어서 그려주면 된다.
어떻게 그릴지는 front에서 결정.
한 backend에 모바일앱, 웹 등 다양한 client 가능하다.

API 열어두면 (날씨 등처럼) 횟수당 요금을 charging하는 '데이터 판매'도 가능하다.
json 형태로 주고 받는 정보가 많다 : 날씨, 공공데이터포털

Article data 불러오기

먼저 articles/serializers.py에서

from rest_framework import serializers
from articles.models import Article # Article 모델 받아오기


# 모델을 기반으로 Serializer 만들기
class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article # 모델이 Article 모델이다.
        fields = "__all__" # 모든 필드를 다 다루겠다.

이것을 articles/views.py에서 쓰는 방법은

from rest_framework.response import Response
from rest_framework.decorators import api_view
from articles.models import Article
from articles.serializers import ArticleSerializer # 추가


@api_view(['GET'])
def index(request):
    articles = Article.objects.all()
    article = articles[0] 
    serializer = ArticleSerializer(article) # 이하를 수정
    return Response(serializer.data) # serializer.data 해야 한다.

가져온 article 데이터를 ArticleSerializer 안에 넣으면
Serializer가 그 데이터를 시리얼라이즈 해서 변수에 저장한다.
저장된 값을 Response()에 넣는다.

serializer라는 인스턴스(객체)는
Serializer를 통과하여 만들어진 결과값이기 때문에

우리가 원하는 데이터는
serializer(인스턴스).data(어트리뷰트)에 저장돼 있다.

인스턴스 안에 data라는 어트리뷰트가 있어서 그 안에 저장돼 있는 것.

어트리뷰트 없이 Response(serializer)만 할 경우 다음과 같은 오류가 발생한다.

'Serializer의 인스턴스가 들어왔으나, 당신이 의도한 것은 .data.error였을 것이다.'

여러 개의 data 불러오기

위와 같이 여러 개가 들어있는 쿼리셋를 불러올 때는
many=True를 추가하면 [리스트 형태]로 리턴된다.

(추가 안 하면 '쿼리셋에는 title 항목이 없다'는 오류가 발생한다)

# ...

@api_view(['GET'])
def index(request):
    articles = Article.objects.all()
    serializer = ArticleSerializer(articles, many=True) # 변수가 복수
    return Response(serializer.data)
profile
Español, Inglés, Coreano y Python

0개의 댓글