dev/django

Django Rest Framework

wlrn566 2023. 4. 9. 19:36

rest api 개발을 장고를 이용해 하기 위해 django rest framework 라이브러리를 이용한다.

 

 

 

라이브러리 설치

 

pip install djangorestframework

 

 

 

앱 생성

 

python manage.py startapp my_django_api

 

 

 

settings.py - INSTALLED_APPS 부분 추가

 

 

 

 

models.py 에 모델 만들기

model : 장고에서 데이터 서비스의 layer이다. 데이터베이스에서 테이블이 된다.

 

from django.db import models

# Create your models here.
class Test(models.Model):
  id = models.IntegerField()
  name = models.CharField(max_length=100)

 

 

친절하게 id라는 이름은 기본키가 되어야 한다고 알려준다.

id의 괄호안에 primary_key=True 를 넣어준다.

 

 

 

앱 내 serializers.py 파일 생성

serializers : api 통신 시 모델 데이터를 json 형태로 변경해준다.

 

from rest_framework import serializers
from .models import Test

class TestSerializer(serializers.ModelSerializer):
    class Meta:
      model = Test # 모델
      fields = ("__all__") # 모든 필드
      # fields = ('id', 'name') # 필드 선택

 

 

 

views.py 파일에 추가

model에 대한 기능을 정의할 수 있다.

viewset : viwe가 아닌 viewset을 사용하면 CRUD를 따로 정의할 필요가 없다. 요청 시 get, delete, post 만 변경해주면 된다.

클래스로 한번에 관리가 되어 편하지만 상세히 나누어야 할 경우 다른 방법을 사용해야한다. (아래에 추가)

 

from django.shortcuts import render
from rest_framework import viewsets
from .serializers import TestSerializer
from .models import Test

# Create your views here.
class TestView(viewsets.ModelViewSet):
    queryset = Test.objects.all()
    serializer_class = TestSerializer

 

 

라우터 등록

url 경로를 등록해줘야 한다. 해당 경로로 요청을 던질 수 있다.

 

1. 프로젝트 내 urls.py 파일에 앱의 urls.py의 경로를 이용하기 위해 등록한다.

 

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('my_django_api.urls')), # 앱의 urls.py 등록
]

 

2. 앱 내 urls.py 파일이 없다면 새로 만들고 경로를 정의 해준다.

 

from django.urls import include, path
from rest_framework import routers
from . import views #views.py

router = routers.DefaultRouter() # DefaultRouter를 설정
router.register('test', views.TestView) # test 경로와 view를 등록

urlpatterns = [
    path('', include(router.urls))
]

 

 

 

마이그레이션 

 

python manage.py makemigrations

 

마이그레이션 파일이 만들어 진다.

 

 

python manage.py migrate

 

테이블이 만들어진다.

 

 

 

 

 

 

 


 

** @api_view 데코레이터를 이용해서 Viewset으로 통합되어 관리하기 보다 더 상세히 함수로 나누어 관리할 수 있다.

 

views.py에 함수를 만들고 @api_view() 데코레이터 적용

rest_framework.decorators에서 import 해줘야한다.

 

# views.py

from rest_framework.response import Response
# from rest_framework import viewsets
from .serializers import TestSerializer
from .models import Test
from rest_framework.decorators import api_view

# Create your views here.
# class TestView(viewsets.ModelViewSet):
#     queryset = Test.objects.all()
#     serializer_class = TestSerializer

@api_view(['GET'])
def getText(request):
    queryset = Test.objects.all()
    print(queryset)
    serializer = TestSerializer(queryset, many=True)
    return Response(serializer.data)

 

 

 

라우터 적용

 

# urls.py

from django.urls import path
from . import views #views.py

urlpatterns = [
    path('test', views.getText),
]

 

 

 

 


 

마이그레이션 삭제 (테이블 삭제)

 

1. 테이블 드롭

2. migrations 폴더 내 해당 마이그레이션 파일 삭제

3. django_migrations 테이블에서 해당 row 삭제

4. 다시 마이그레이션 명령어 실행