개미의 개열시미 프로그래밍

[django] 3. Serializer 라이브러리 활용(Rest Framework) 본문

WEB/django

[django] 3. Serializer 라이브러리 활용(Rest Framework)

YunHyeok 2021. 7. 3. 03:09
728x90
반응형

처음 가상 환경을 세팅할 때 Rest Framework를 설치하였다.

https://reliablecho-programming.tistory.com/44

 

[django] 1. 장고 개발 환경 준비하기 (with Rest Framework)

이번 우리 졸업 프로젝트에서 프론트(React), 백앤드(Django), 데이터베이스(MySql)를 연동하는 작업이 필요하다. 먼저, 가상환경을 세팅하는 것부터 시작해서 목표는 리액트를 연동하는 것까지 작성

reliablecho-programming.tistory.com

 

Rest Framework란?

- DRF(Django Rest Framework)는 Django 안에서 RESTful API 서버를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리이다.

 

Serializer란?

- 쿼리셋, 모델 인스턴스 등이 복잡한 데이터를 JSON, XML 등의 컨텐트 타입으로 쉽게 변환 가능한 python datatype으로 변환시켜주는 Serializer기능을 쓸 때 유용하다. (데이터베이스의 데이터를 JSON 형식으로!)

 

이번은 Serializer 라이브러리를 활용해서 DB 데이터를 받아 view로 띄워보려 한다.

# api/serializer.py
from rest_framework import serializers
from .models import Item_Info


class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item_Info
        fields = ('id', 'category_L', 'name', 'value', 'price')


class PriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item_Info
        fields = ('id', 'price')


class ValueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item_Info
        fields = ('id', 'value')

- api 디렉터리 밑에 serializer.py를 생성해서 넣어준다. 

- Item_Info 모델의 데이터를 뽑아 전송하기 위한 정의를 한다.

- serializer.py를 작성할 땐 이전에 작성했던 models.py의 모델을 보면서 값을 잘 넣어준다.

 

[api/Serializer.py - api/View.py 연결]

# api/views.py
from django.shortcuts import render

from rest_framework.generics import UpdateAPIView, DestroyAPIView
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Item_Info
from .serializers import ItemSerializer, PriceSerializer, ValueSerializer
# Create your views here.

@api_view(['GET'])
def API(request):
    return Response("안녕하세요 api에 오신것을 환영합니다.")

@api_view(['GET'])
def ItemAPI(request, id):
    this_item = Item_Info.objects.get(id=id)
    serializer = ItemSerializer(this_item)
    return Response(serializer.data)
# => pid=id01에 대해 리턴된 Response: {'pid': id01, 'category_L': 0, 'name': 'can_pepsi', 'value': 5, 'price': 1500}


# api/views.py
@api_view(['GET'])
def PriceAPI(request, id):
    this_item = Item_Info.objects.get(id=id)
    serializer = PriceSerializer(this_item)
    return Response(serializer.data)
# => pid=id01에 대해 리턴된 Response: {'pid': id01,  'price': 1500}

# update
class UpdateAPI(UpdateAPIView):
    queryset = Item_Info.objects.all()

    serializer_class = ValueSerializer


# delete
class DeleteAPI(DestroyAPIView):
    queryset = Item_Info.objects.all()

    serializer_class = ItemSerializer

 

[api/url.py와 mysite/url.py 설정]

- url을 맵핑해주는 부분이다. 

# api/urls.py
from django.urls import path, include
from .views import API
from .views import ItemAPI, PriceAPI, UpdateAPI, DeleteAPI

urlpatterns = [
    path("api/", API),
    path("info/<str:id>", ItemAPI, name="get_info"),
    path("price/<str:id>", PriceAPI, name="get_price"),
    path("price/<str:id>/update", UpdateAPI.as_view(), name="update_item"),
    path("price/<str:id>/delete", DeleteAPI.as_view(), name="delete_item"),
]
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include("api.urls"))
]

 

 

[주소창에 'localhost:8000/info/1' 결과 화면]

- 잘 출력되고 있는 것을 확인할 수 있습니다.

 

 

참고 사이트


- https://devkor.tistory.com/entry/03-Django-Rest-Framework-Serializer-View-%EA%B0%9C%EB%85%90-%EC%9D%B5%ED%9E%88%EA%B8%B0?category=734691 

- https://www.django-rest-framework.org/api-guide/serializers/#modelserializer

728x90
반응형
Comments