Today I Learned/django

장고 (djagno) Rest framework tutorial #1 데이터 가져오기 (GET)

하나719 2023. 9. 5. 11:09
반응형

RESTful API는 언제 사용하나?

웹 어플리케이션 간에 서버에서 데이터를 주고 받을 때 , 외부 서비스와 통합할 때( 지도, 결제처리, 메시징처리 등) , 클라이언트와 백엔드 서버간에 효율적인 통신을 구축할 때 , 다른 서버와의 통신이 필요할 때 등 RESTful API를 사용하면 데이터의 공유와 상호 작용을 효율적으로 관리하고, 서로 다른 시스템 간의 통신을 단순화할 수 있습니다.

 

DRF (djangorestframework)

장고기반 웹 어플리케이션에서 RESTful API를 만드는 것을 도와주는 패키지

 

아주 간단한  API 만들어보기

1. 장고 프로젝트 생성 

django-admin startproject myproject
cd myproject

2. DRF 설치

pip install djangorestframework

3. settings.py에 추가

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ## 추가
    'rest_framework',
]

4. api 폴더 생성 후 파일 추가

views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response


@api_view(['GET'])
def getData(request):
    person = {'name':'hana', 'age':30}
    return Response(person)

urls.py

from django.urls import path
from . import views

urlpatterns =[
    path('', views.getData),
]

myproject> urls.py

from django.contrib import admin
from django.urls import path, include

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

5. migrate후 서버 실행

python manage.py migrate
python manage.py runserver

http://127.0.0.1:8000/


직접 입력해준 데이터를 서버에서 받아와서 확인하는것 까지 해보았다.

하지만 장고에서는 이렇게 값을 다 입력해주지 않고, 모델로 정의해서 객체로 저장되어 있다.

이걸 json으로 변환해서 출력해주는걸 해보자

모델 객체를 RestAPI에서 받아오기

1. base app 생성 후 settings.py에 추가해주기

python manage.py startapp base

2. models.py 에 모델 추가

from django.db import models

# Create your models here.
class Item(models.Model):
    name = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)

(+) shell에서 item 객체 생성 해준다. 

Item.objects.create(name='hana1')

Item.objects.create(name='hana2')

Item.objects.create(name='hana3')

 

3. api 폴더에 serializers.py 파일 생성

장고의 모델 객체는 웹사이트가 읽기 복잡한 형태이므로, json 으로 변환해주기위한 데이터직렬화 작업 

rest_framework의 serializers 를 상속받아서 생성하며, Meta클래스 내에서 어떤 모델을 사용할지, 어떤 필드를 가져올지 지정해줍니다.

from rest_framework import serializers
from base.models import Item

class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields= '__all__'

4. views.py 수정

Item model의 객체를 모두 불러와서 3에서 만들어준 ItemSerializer에 전달하여 직렬화 해준다.

직렬화해준 값의 data를 전달해준다.

@api_view(['GET'])
def getData(request):
#     person = {'name':'hana', 'age':30}
#     return Response(person)

	## 수정
    items = Item.objects.all()
    serializer = ItemSerializer(items, many=True)
    return Response(serializer.data)

5. 데이터 확인

반응형