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
직접 입력해준 데이터를 서버에서 받아와서 확인하는것 까지 해보았다.
하지만 장고에서는 이렇게 값을 다 입력해주지 않고, 모델로 정의해서 객체로 저장되어 있다.
이걸 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. 데이터 확인
'Today I Learned > django' 카테고리의 다른 글
장고(django) 회원가입 (UserCreationForm) (0) | 2023.09.07 |
---|---|
장고 asgi(비동기) 채팅기능 구현하기 (2) | 2023.09.06 |
장고 (django) 캐시 사용하기 (redis) (0) | 2023.09.01 |
장고 (django) 캐시 사용하기 (memcached) (0) | 2023.08.31 |
장고 (django) 클래스 기반 뷰에서 믹스인 사용하기 (mixin) (0) | 2023.08.29 |