ionic 3 앱 개발 (Django API 만들기) - [여행플랜/백엔드]

이전 내용

저번 시간에 만든 모델과 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-headersionicdjango를 동시에 로컬에서 돌리면서 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.pyviews.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_FrameworkGeneric ViewListAPIView를 사용할 것 입니다.

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'))
]

프로젝트 폴더인 Tourplanurls.pyurlpattern으로 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'),
]

APIurl경로를 설정해 줍니다.

현재 설정된 경로 : api/list

Result

api-result-01

Django-Rest-Framework에서 제공해주는 Generics View를 사용하면 수정, 조회, 변경, 삭제가 가능한 API도 구현 가능합니다.

다음 내용