이전 내용
- [ionic 3 앱 디자인 (여행플랜) 포스팅]
- [ionic 3 앱 개발 (사이드메뉴&탭 결합) 포스팅]
- [ionic 3 앱 개발 (탭 아이콘 변경) 포스팅]
- [ionic 3 앱 개발 (검색바 애니메이션) 포스팅]
- [ionic 3 앱 개발 (다양한 애니메이션) 포스팅]
- [ionic 3 앱 개발 (드롭다운) 포스팅]
- [ionic 3 앱 개발 (슬라이드) 포스팅]
- [ionic 3 앱 개발 (Django 모델설계) 포스팅]
- [Github 전체 소스코드]
저번 시간에 만든 모델과 Django Rest Framework를 이용해 API를 만들어보도록 하겠습니다.
설치 및 설정
1
2
C:\Users\wk647\Desktop\Tourplan_Django> pip install django-cors-headers==2.1.0
C:\Users\wk647\Desktop\Tourplan_Django> pip install django-rest-framework==0.1.0
API를 만들기 위해서 Django-Rest-Framework를 설치합니다. django-cors-headers
는 ionic과 django를 동시에 로컬에서 돌리면서 http request를 하기 위해서 보안으로 인해 접근이 중단되는 것을 막아주는 라이브러리 입니다.
Tourplan/settings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
INSTALLED_APPS = [
...
'corsheaders',
'Product',
'rest_framework',
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
CORS_URLS_REGEX = r'^/api/.*$'
CORS_ORIGIN_ALLOW_ALL = True
settings.py에 생성한 앱과 라이브러리들을 등록하고, CORS세팅을 해줍니다.
[미들웨어에 대한 자세한 설명]을 참고하세요!
API를 위한 파일 생성하기
1
2
3
4
5
6
7
|-- Product
| |-- api
| | |-- serializer.py
| | |-- urls.py
| | |-- views.py
| |-- migrations
|-----
Product에 하위 폴더로 api폴더를 생성해주시고, 3개의 파일을 만듭니다!!
serializer.py 파일은 DB에 저장된 데이터를 Json 형식으로 변환해주는 역할을 합니다. urls.py와 views.py는 기존에 Django와 비슷하게 활용되어지고 있습니다.
api/serializer.py
1
2
3
4
5
6
7
8
9
10
11
12
from rest_framework import serializers
from Product.models import ProductList
class ProductListSerializers(serializers.ModelSerializer):
class Meta:
model = ProductList
fields = [
'id',
'img_url',
'title',
'sub_title',
]
ProductList라는 모델에서 ‘id’, ‘img_url’, ‘title’, ‘sub_title’ 이라는 필드를 가져와 Json 형태로 만들어 줍니다.
api/views.py
1
2
3
4
5
6
7
8
9
10
from rest_framework import generics
from Product.models import ProductList
from .serializers import ProductListSerializers
class ProductListView(generics.ListAPIView):
lookup_field = 'id'
serializer_class = ProductListSerializers
def get_queryset(self):
return ProductList.objects.all()
Django-Rest_Framework의 Generic View 중 ListAPIView를 사용할 것 입니다.
ListAPIView는 array 타입의 json 형태로 값이 전달되어 집니다.
Tourplan/urls.py
1
2
3
4
5
6
7
from django.conf.urls import url, include
...
urlpatterns = [
...
url(r'^api/', include('Product.api.urls', namespace='api'))
]
프로젝트 폴더인 Tourplan에 urls.py에 urlpattern으로 api.urls를 입력합니다.
api/urls.py
1
2
3
4
5
6
from .views import ProductListView
from django.conf.urls import url
urlpatterns = [
url(r'^list/$', ProductListView.as_view(), name='product-list'),
]
API의 url경로를 설정해 줍니다.
현재 설정된 경로 : api/list
Result
Django-Rest-Framework에서 제공해주는 Generics View를 사용하면 수정, 조회, 변경, 삭제가 가능한 API도 구현 가능합니다.