티스토리 뷰
django REST ramework (DRF)는 RESTful한 API를 쉽게 만들 수 있도록 해준다.
지금부터 DRF를 사용해 영화 리스트를 CRUD (Create,Read,Update,Delete) 할 수 있는 간단한 API를 만들어 볼 것이다.
혹시 REST가 뭔지 모른다면 알아보고 만들어보도록하자.
http://meetup.toast.com/posts/92
1. 환경 셋팅
먼저 virtualenv나 pyenv로 가상환경을 만들어 준다.
필자는 python 3.6.5 django 2.0.6 환경에서 작업했다.
2. django와 django-rest-framework 설치
가상환경에 진입해 pip로 django와 django-rest-framework를 설치한다.
pip install django
pip install djangorestframework
3. project 생성
movie_api이라는 django project를 생성한다.
django-admin startproject movie_api
4. movies app 생성
movies 앱을 생성한다.
python manage.py startapp movies
5. settings.py 설정
settings.py에서 DRF와 만든 movies앱을 등록해준다.
또한 ALLOWD_HOSTS도 설정해주자. develop 용으로 모두 허용해준다.(배포할 땐 허용 가능 호스트를 설정해준다.)
# settings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
...
'rest_framework',
'movies.apps.MoviesConfig',
]
6. Model 생성
Movie 모델을 생성한다. 간단하게 영화 제목,장르,제작 년도의 필드를 갖는다.
# 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
코드 작성 후 마이그레이션,마이그레이트를 해준다.
python manage.py makemigrations
python manage.py migrate
7. 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') # 필드 설정
8. views.py 작성
DRF는 보통 사람들이 자주 사용하는 공통적인 view 로직을 그룹화 한 viewset을 제공한다. viewset을 사용하게 되면 CRUD 로직을 직접 짜지 않아도 이 기능들이 사용 가능해진다. 필자는 처음에 '읭 아무것도 안했는데 다 되네...? ㅇ0ㅇ' 했다.
# 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
9. 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'
10. 실행
자 이제 코드 작성은 끝이 났다! 런서버로 실행해본다.
python manage.py runserver
11. 완성! 검토!
만든 api로 CRUD 요청을 해보자.
api 요청 uri과 method를 정리해보자면
GET /movies/ 영화 리스트 조회
POST /movies/ 영화 객체 추가
GET /movies/{pk}/ 영화 객체 조회.(한개)
PUT /movies/{pk} 영화 객체 수정
DELETE /movies/{pk} 영화 객체 삭제
이렇게 된다.
먼저 localhost:8000 으로 들어가게 되면 해당 화면이 보일 것이다.
movies/ 링크로 들어가본다.
GET /movies/는 영화의 리스트를 요청하는 uri이다.
현재 movie 값이 하나도 없으므로 빈 리스트만 반환하는 것을 볼 수 있다.
아래 폼으로 영화 정보를 입력해보자. 입력 하면 post 버튼을 누른다.
그러면 POST 메소드로 /movies/ uri에 요청이 가고, 해당 정보는 저장이 될 것이다.
그리고 이렇게 방금 저장한 movie 객체의 정보가 json 형태로 반환되는 것을 볼 수 있다.
테스트를 위해 영화를 더 저장해 보았다.
GET /movies/3 요청은 id가 3번 째인 movie 객체를 조회하게 된다.
PUT 메소드로 보내면 해당 객체를 수정하고, DELETE 메소드로 요청하면 해당 객체를 삭제할 것 이다.
api 테스트 프로그램 postman에서도 api 요청이 잘 이루어진 다는 것을 알 수 있다.
이렇게 DRF로 RESTful한 API를 만들어 보았다.
DRF는 더욱 많은 기능을 제공하고 커스텀을 할 수 있도록 제공하므로 Web api를 강력하고 유연하게 만들 수 있다. ㅎㅎ
refer
http://www.django-rest-framework.org/
https://cjh5414.github.io/django-rest-framework/
http://brownbears.tistory.com/71
'Framework > Django' 카테고리의 다른 글
pythonanywhere로 django 프로젝트 배포하기 (2) | 2018.06.05 |
---|---|
Django template url tag in javascript (0) | 2018.03.18 |
Django get_or_create (0) | 2018.03.11 |
Specifying a namespace in include() without providing an app_name is not supported. 오류 해결 (4) | 2018.02.28 |
Window 환경 Django+Mysql 연동하기! (Mysqlclient) (7) | 2018.02.25 |
- Total
- Today
- Yesterday
- selenium 새 탭 크롤링
- java parseInt
- java int to String
- 음수 10진수 음수 2진수
- 전자계산기 구현
- 계산기 구현
- 후위 표기 수식 계싼
- sass 사용법
- 후위 표기법
- jsp tomcat
- selenium switch_to_window python
- sass
- 후위 표현식
- selenium 새 창 크롤링
- selenium switch_to_window
- 중위 표기법 후위 표기법
- 후위 표기 계산
- virtualenv
- jsp oracle 연동
- 2의 보수법
- java toString
- 중위 표현식 후위 표현식
- sass 설치
- 후위 표기식
- jsp tomcat 연동
- 2진수 음수
- java String to int
- 후위 표기법 계싼
- jsp 서버 연동
- python virtualenv
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |