파이썬 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
'major > Python' 카테고리의 다른 글
파이썬 문서화하기 - docstring (0) | 2020.04.18 |
---|---|
파이썬으로 가우시안 필터링하기 (3) | 2020.04.17 |
파이썬 공공 API 가져오기 - 공적 마스크 (4) | 2020.03.25 |
맥(macOS)에서 파이썬 윈도우 실행파일 만들기 (2) | 2020.02.24 |
파이썬 트위터 크롤링하기 - twitterscraper (20) | 2020.02.23 |