1편에서는 파이썬 Django를 사용하여 데이터를 저장해 놓을 Model을 만드는 방법에 대해 알아봤습니다.
이어서 이번에는 지난번에 생성한 모델에 데이터를 넣고
해당 데이터를 JSON 형태의 데이터로 출력하는 방법을 알아보겠습니다.
이번 포스팅에서는 Rest API 통신을 통해 다음과 같은 방법을 알아보겠습니다.
- Model에 데이터 입력하기
- Model에 있는 모든 데이터 출력하기
- Model에 있는 특정 데이터만 JSON으로 출력하기
Model에 데이터 입력하기
프로젝트를 실행한 후 다음과 같이 입력하여 관리자 페이지에 진입합니다.
http://127.0.0.1:8000/admin/
그리고 방금 생성한 Movie 모델을 클릭하여 들어갑니다.
오른쪽에 있는 ADD MOVIE+ 버튼을 클릭하여 아무 데이터를 3개 정도 만듭니다.
참고로 저는 다음과 같이 만들었습니다.
Model에 있는 모든 데이터 출력하기
먼저 URL 링크에 /movie를 입력했을 경우 watchlist_app을 참조하도록 합니다.
프로젝트 이름으로 되어있는 폴더에 있는 urls.py에 다음과 같이 정의합니다.
from django.contrib import admin
from django.urls import path
from django.urls.conf import include
urlpatterns = [
path('admin/', admin.site.urls),
# watchlist_app에 있는 urls을 참조하도록 한다.
path('movie/', include('watchlist_app.urls')),
]
그리고 watchlist_app에 있는 urls.py에 다음과 같이 정의합니다.
from django.urls import path
from django.urls.conf import include
from watchlist_app.views import moive_list
urlpatterns = [
# 여기서 name은 해당 url에 지정해주는 이름임
# /list에 접속했을 때 movie_list라는 이름을 가진 함수를 views.py에서 찾아서 실행하도록 한다.
# 이 때 해당 url(= /list)의 별명을 'movie-list'로 설정한다.
path('list/', moive_list, name='movie-list')
]
즉, 아래와 같은 순서로 이동하면서 동작을 실현합니다.
프로젝트 폴더에 있던 urls.py -> 원하는 앱의 폴더에 있던 urls.py -> views.py에 있는 함수 실행
(링크를 왼쪽에서 읽은 것과 비슷한 움직임을 보여줍니다.)
참고로 위 코드에서 '/list'의 별명을 'movie-list'로 설정했는데
이렇게 하면 해당 앱(= movie) 내에서 'movie-list'라는 이름을 사용하면 '/list'라는 링크를 가리킬 수 있게 됩니다.
그리고 해당 앱의 views.py에 다음과 같이 정의합니다.
from watchlist_app.models import Movie
from django.http import JsonResponse
def moive_list(request):
# Movie 모델의 모든 데이터를 가져온다
movies = Movie.objects.all()
data = {
# values() 함수를 써야만 key-value 형태로 데이터를 반환한다.
'movies': list(movies.values())
}
# json_dumps_params를 사용하여 한글을 ascii 코드로 변환하지 않도록 한다.
return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
그리고 프로젝트를 실행 후 /movie/list/로 들어가면 다음과 같은 결과를 얻을 수 있다.
위에서 생성한 모든 데이터가 JSON 형태로 출력되고 있는 것을 볼 수 있다.
Model에 있는 특정 데이터만 JSON으로 출력하기
위 코드에서 실시한 내용을 보면 Movie DB에 있는 모든 데이터를 출력하는 것을 알 수 있습니다.
대부분의 상황에서 모든 데이터 보단 원하는 특정 데이터만 출력해야 하기 때문에
특정 데이터만 출력하는 방법에 대해 알아보겠습니다.
다시 views.py로 돌아와서 다음과 같은 함수를 생성합니다.
def movie_detail(request, pk):
movie = Movie.objects.get(pk=pk)
data = {
'name': movie.name,
'description': movie.description,
'active': movie.active
}
return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
그리고 urls.py에 위에서 추가한 함수를 여기에도 추가해줍니다.
from django.urls import path
from watchlist_app.views import moive_list, movie_detail
urlpatterns = [
path('list/', moive_list, name='movie-list'),
path('list/<int:pk>', movie_detail, name='movie-detail'),
]
그리고 프로젝트를 정지했다가 다시 실행하고
다음과 같은 주소에 접속합니다.
루트/movie/list/1
그러면 다음과 같은 화면을 확인할 수 있습니다.
'파이썬(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 프레임 워크 사용하기 - 기초편 (0) | 2024.01.28 |
파이썬 Django를 사용해서 Rest API 통신할 수 있는 서버 만들기 - 1 (0) | 2023.11.30 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글