이전 포스팅에서는 파이썬의 Django을 설치하는 방법과 기본적인 원리를 설명했습니다.
이번 포스팅에서도 이어서 하기 때문에 아래의 포스팅을 먼저 보는 것을 추천합니다.
이번에는 REST API를 쉽게 만들 수 있도록 제작된 장고(Django)의 REST API 프레임 워크를 사용하는 방법에 대해 알아보겠습니다.
먼저 장고(Django)의 REST API 프레임 워크를 시작하기 위한 준비와 기초를 알려드리겠습니다.
- Django REST API 프레임 워크 설치
- Serialize과 Function Based Views를 이용하여 Django REST API 사용하기
- Serialize와 Function Based Views는 무엇인가
Django REST API 프레임 워크 설치
먼저 공식 문서는 다음과 같습니다.
https://www.django-rest-framework.org/
저희는 이미 이전 과정에서 Django의 설치를 완료했고 프로젝트도 완성했기 때문에
여기서는 REST API 프레임 워크만 설치하는 방향으로 가겠습니다.
프로젝트에서 다음과 같은 커맨드를 입력합니다.
pip install djangorestframework
그리고 프로젝트의 루트 경로에서 프로젝트의 이름과 같은 폴더에 있는 settings.py에 들어갑니다.
그리고 INSTALLED_APP 부분에 다음과 같이 REST API 프레임 워크를 추가합니다.
INSTALLED_APPS = [
...
'rest_framework',
]
여기까지 하고 프로젝트를 정지했다가 다시 실행하여 문제없이 실행되는지 확인합니다.
기존에 셋업 해뒀던 Django 프로젝트 정리
먼저 이전 포스팅에서 실시했던 작업의 일부를 수정해야 합니다...
이 작업은 Django REST API 프레임워크를 처음부터 사용하는 분들은 할 필요 없습니다.
이전 포스팅의 작업을 수정하는 거니까요 ㅠㅠ
기존에 있던 프로젝트/프로젝트 이름 폴더에 있던 urls.py에 있던 내용을 다른 곳으로 옮겨줍니다.
프로젝트 루트에 api라는 폴더와 그 안에 urls.py 그리고 views.py라는 파일을 각각 만듭니다.
그리고 기존에 앱에 있던 urls.py와 views.py에 있는 데이터를 전부 방금 생성한 api 폴더 안에 있는
urls.py 그리고 views.py 파일 안에 옮길 예정입니다.
1. 먼저 다음과 같이 기존앱/urls.py에 있던 코드를 api 폴더에 있는 urls.py에 옮깁니다.
# api/urls.py
from django.urls import path
from api.views import moive_list, movie_detail
urlpatterns = [
path('list/', moive_list, name='movie-list'),
path('list/<int:pk>', movie_detail, name='movie-detail'),
]
여기서 주의해야 할 점은 import 부분에서 api 폴더 안에 있는 views.py를 참조할거기 때문에 from 부분을 바꿔줘야 한다는 것입니다.
2. 프로젝트 이름의 폴더/urls.py에 있던 include 부분도 1번에 실시한 행동에 맞게 바꿔줍니다.
# 프로젝트 이름의 폴더/urls.py
from django.contrib import admin
from django.urls import path
from django.urls.conf import include
urlpatterns = [
path('admin/', admin.site.urls),
path('movie/', include('api.urls')),
]
그럼 다음과 같은 모습이 됩니다.
3. 여기까지 했으면 기존앱/urls.py 파일은 필요 없기 때문에 삭제해도 괜찮습니다.
4. 기존앱/views.py 파일 또한 삭제합니다.
여기까지 했으면 기존 앱(watchlist_app)의 전환 작업은 끝났습니다.
Serialize과 Function Based Views를 이용하여 Django REST API 사용하기
Django REST API 프레임 워크를 사용하는 방법 중 제일 기본적인 방법을 먼저 알려드리겠습니다.
api/ 아래에 다음과 serializer.py 파일을 추가합니다.
그리고 다음과 같이 코드를 작성합니다.
# api/serializer.py
from rest_framework import serializers
class MovieSerializer(serializers.Serializer):
# 각 변수별로 serialize한 데이터를 받는다.
id = serializers.IntegerField(read_only=True)
name = serializers.CharField()
description = serializers.CharField()
active = serializers.BooleanField()
그리고 이번에는 api/ 아래에 생성해 둔 views.py를 다음과 같이 정의합니다.
# /api/views.py
from watchlist_app.models import Movie
from api.serializers import MovieSerializer
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view()
def moive_list(reqsuet):
movies = Movie.objects.all()
serializer = MovieSerializer(movies, many=True)
return Response(serializer.data)
@api_view()
def movie_detail(request, pk):
movie = Movie.objects.get(pk=pk)
serializer = MovieSerializer(movie)
return Response(serializer.data)
Serialize를 사용하기 전에는 views.py에서 값을 하나씩 정의해서 JSON 데이터로 넘겨줬지만
지금은 간단하게 바뀐 모습을 알 수 있습니다.
이제 프로젝트를 새롭게 빌드해서 /movie/list에 들어가 보면 다음과 같은 모습을 볼 수 있습니다.
이전과 정말 달라진 UI를 확인할 수 있습니다.
/movie/list/1에 들어가도 완전히 달라진 모습을 확인할 수 있습니다.
Serialize와 Function Based Views는 무엇인가
장고 REST API 프레임워크를 사용할 때 Serialize와 Function Based Views라는 용어를 사용했습니다.
Serialize는 뭐고 Function Based Views는 무엇일까요?
먼저 Serialize는 다음과 같습니다.
- Serialize
- Django의 기본 Serializer는 복잡한 데이터 타입을 Python 데이터 타입으로 변환하거나 그 반대의 작업을 수행하는 데 사용됩니다.
- JSON이나 XML과 같은 콘텐츠 타입으로 쉽게 렌더링 될 수 있게 해 줍니다.
- 표준 Serializer를 사용하면 모델 클래스에 대한 정보를 직접 제공해야 합니다.
- Function Based Views
- Django에서 제공하는 기본적인 뷰 작성 방식입니다.
- 지금까지 포스팅에서 사용해 왔던 views.py에서 각 뷰마다 하나의 함수를 정의하는 방법
- 뷰가 복잡해질수록 함수의 길이가 길어지고, 재사용성이 떨어집니다.
위 두 항목을 개선한 버전을 장고 REST API 프레임워크에서 사용할 있습니다.
이에 대한 설명은 다음 포스팅에서 진행하겠습니다.
'파이썬(Python) > 장고(Django)' 카테고리의 다른 글
[기초] 파이썬 장고 REST API 프레임워크 - Validation (0) | 2024.02.02 |
---|---|
[기초] 파이썬 장고 REST API 프레임 워크 - Class-based Views (0) | 2024.02.01 |
파이썬 Django REST API 프레임워크 CRUD 사용하기 (2) | 2024.01.31 |
파이썬 Django를 사용해서 Rest API 통신 서버 만들기 - 2 (0) | 2024.01.27 |
파이썬 Django를 사용해서 Rest API 통신할 수 있는 서버 만들기 - 1 (0) | 2023.11.30 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글