본문 바로가기

major/Python

파이썬으로 REST API 개발하기 - Django

파이썬 3.7.6을 기준으로 작성된 문서입니다.

앱을 개발하면서 많은 API를 사용해봤는데 항상 이 API는 어떻게 개발하는 건지 궁금했습니다. 최근 현업에 계신 분의 글을 보다가 Django로 REST API를 간단하게 구현할 수 있다는 걸 알게되어서 한번 시도해봤습니다.

 

이번 포스팅에서는 장고 홈페이지에서 제공하는 첫 번째 장고 앱 작성하기 part2까지 진행했다고 가정한 후, 작성한 앱에 REST API를 추가하는 방법에 대해서 정리했습니다.

그리고 Python으로 API를 파싱하는 방법까지 정리했습니다.

장고 공식사이트에서 제공하는 "첫 번째 장고 앱 작성하기" 바로가기

 

먼저 REST API 개발을 위해 필요한 라이브러리를 설치합니다.

pip install djangorestframework

pip install django-rest-swagger

그리고 mysite/settings.py에 'rest_framework', 'rest_framework_swagger'을 추가합니다.

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework_swagger',
]

 

이제 데이터를 Json, XML로 변경해 줄 serializer와 serialize한 데이터를 보여 줄 View 코드가 필요합니다.

polls폴더 내에 serializer.py 파일을 생성하고 아래 코드를 복붙합니다.

from .models import Question
from rest_framework import serializers, viewsets

class QuestionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Question
        fields = '__all__'

class QuestionViewSet(viewsets.ModelViewSet):
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer

 

그리고 mysite/urls.py에 serializer.py를 연결해야합니다.

mysite/urls.py에 다음 코드를 복붙합니다.

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

from django.conf.urls import url
from rest_framework import routers
import polls.serializer

app_name='polls'

router = routers.DefaultRouter()
router.register('polls', polls.api.QuestionViewSet)

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
    url('api/v1/', include((router.urls, 'polls'), namespace='api')),
]

 

Django를 실행합니다.

python manage.py runserver

http://localhost:8000/api/v1/polls/ 를 열면 아래처럼 json으로 된 데이터가 보여지는 것을 확인할 수 있습니다.

 

실행 화면

정말 간단하게 REST API를 개발할 수 있었습니다.

 

이렇게 개발한 API를 Python을 사용해서 파싱해보겠습니다.

코드는 굉장히 간단합니다. 아무데나 파일을 만들고 다음 코드를 복붙한 후 실행합니다.

from urllib.request import urlopen
import json

url = "http://localhost:8000/api/v1/polls/"
responseBody = urlopen(url).read().decode('utf-8')
jsonArray = json.loads(responseBody)

for list in jsonArray:
    print(list["question_text"])

위 코드는 가져온 json 데이터에서 question_text 데이터만 출력하도록 짠 코드입니다.

 

실행 화면

Django를 사용하니 기본 템플릿이 적용되어 데이터가 보여져서 개발하기가 굉장히 편합니다.

좀 더 일찍 알았다면 개발할 때 덜 고생했을 텐데ㅠㅠ 예전 프로젝트들이 주마등처럼 스쳐지나가네요..


잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.

이 포스팅이 도움이 되었다면 공감 부탁드립니다.

궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D