django REST framework

cs982607·2021년 1월 3일
0

1.환경셋팅

먼저 가상환경을 만든 후

django , django-rest-framework를 설치한다.

$ pip install django
$ pip install djangorestframework

2. 프로젝트 생성

$ django-admin startproject movie_api

  • 앱 생성

$ python manage.py startapp movies

3. settings.py 설정

settings.py 에서 DRF와 만든 앱을 등록한다.

4. Model 생성

# movie_api/movies/models.py

from django.db import models 
class Movie(models.Model): 
title = models.CharField(max_length=30) # 제목 
genre = models.CharField(max_length=15) # 장르 
year = models.IntegerField() # 제작 년도 

def __str__(self): return self.title

코드 작성 후 마이그레이션 마이그레이트 한다.

serializer 생성

  • Serializer 란 queryset과 모델 인스턴스와 같은 복잡한 데이터를 json, xml 또는 다른 콘텐츠 유형으로 쉽게 변환할 수 있다. 받은 데이터의 유효성을 검사한 후, 복잡한 타입으로 형 변환할수 있도록 serializeation을 제공한다.
# movie_api/movies/serializers.py

from rest_framework import serializers 
from .models import movie 

class MovieSerializer(serializers.ModelSerializer): 
class Meta: model = Movie # 모델 설정 fields = ('id','title','genre','year') # 필드 설정

views.py 작성

  • DRF는 사람들이 자주 사용하는 공통적인 view로직을 그룹화 한 viewset을 제공한다. viewset을 사용하게 되면 CRUD로직을 직접 작성하지 않아도 기능들이 사용 가능하다.
# movie_api/movies/views.py 
from rest_framework import viewsets 
from .serializers import MovieSerializer 
from .models import Movie 

class MovieViewSet(viewsets.ModelViewSet): queryset = Movie.objects.all() serializer_class = MovieSerializer

urls.py 작성

DRF는 url을 자동으로 맵팽하는 router를 제공한다. 앞서 생성한 viewset을 router 에 연결하게 되면 자동으로 url을 맵핑 해주어 사용자가 직접 url을 맵핑하지 않아도 된다.

# movie_api/urls.py 
from django.conf.urls import url,include 
from django.contrib import admin 
from rest_framework import routers 
from movies.views import MovieViewSet 

router = routers.DefaultRouter() 
router.register('movies',MovieViewSet) # prefix = movies , viewset =MovieViewSet 

urlpatterns = [ 
url(r'^admin/', admin.site.urls), 
url(r'^',include(router.urls)), 
]

위에서 router.register로 prefix를 'movies'로 설정을 해주었다.

router는 이를 바탕으로 url을 맵핑하게 된다.

URL pattern: ^movies/$ Name: 'movie-list'
URL pattern: ^movies/{pk}/$ Name: 'movie-detail'

실행

출처: https://jamanbbo.tistory.com/43

profile
기록하는 벨로그

0개의 댓글