1. DRF(Django REST Framework)란?
- Django를 기반으로 REST API 서버를 만들기 위한 라이브러리
- Django는 자체적인 웹 템플릿에게 데이터를 전달해주고, DRF는 다양한 플랫폼의 클라이언트에게 데이터를 전달해준다는 주 목적에 차이가 있다. 그래서 풀스택 개발이 목적인 순수 Django와 달리 DRF는 백엔드 API 서버 개발을 위한 목적으로 사용되며, 순수 Django는 HTML을 응답하는 편이지만, DRF는 JSON을 응답하는 편이다.
DRF 공식 문서
https://www.django-rest-framework.org/
CDRF - DRF의 주요 클래스들의 속성, 메소드, MRO를 확인할 수 있다.
2. DRF 설치
- DRF도 pip 명령을 통해 설치할 수 있다.
pip install djangorestframework
- DRF를 설치했다면, settings.py의 INSTALLED_APPS 항목에 'rest_framework'를 추가하면 된다.
INSTALLED_APPS = [
...,
'rest_framework',
]
3. DRF 프로젝트의 흐름
- 각 앱의 views.py에는 기본적으로 django.shortcuts의 render가 임포트되어 있는데, DRF를 사용할 때는 주로 대부분의 기능들을 다음과 같이 rest_framework 패키지로부터 임포트한다. 즉, 기존에 임포트되어 있던 render는 지워도 된다.
from rest_framework import viewsets, permissions, generics, status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view
- example이라는 앱을 만들고 example/urls.py에 HelloAPI라는 간단한 뷰 하나를 작성해볼 것이다. @api_view 데코레이터를 통해 HelloAPI라는 뷰 함수가 GET 요청을 받을 수 있는 API라고 명시해줬다.
# example/views.py
@api_view(['GET'])
def HelloAPI(request):
return Response("Hello!")
함수의 인자로 받은 request 객체에는 해당 요청에 대한 정보가 담겨있다. 대표적으로 요청 메소드(request.method)와 요청 파라미터 목록(request.GET)을 알 수 있다. request 객체는 WSGIRequest 타입이고, HTTPRequest 클래스를 상속받기 때문에 더 많은 속성들을 살펴보고 싶다면 WSGIRequest, HttpRequest 클래스를 확인해보면 된다.
그리고 Response는 뷰 함수의 반환 타입으로, 다음과 같이 __init__()에 있는 인자들을 받을 수 있다.
위에 작성한 뷰를 "localhost:8000/example/hello" 경로를 통해 접근할 수 있도록 프로젝트와 앱의 urls.py에 다음과 같이 설정해줬다.
# djangoProject/urls.py
urlpatterns = [
...,
path('example/', include('example.urls')),
] ...
# example/urls.py
app_name='example'
urlpatterns = [
# /example/hello
path('hello/', views.HelloAPI),
]
- "localhost:8000/example/hello" 경로로 접속해보면, 다음과 같이 깔끔한 디자인의 요청 결과 화면이 나타나게 된다. 요청 메소드, 요청 URL, 상태 코드, 본문("Hello!") 등이 잘 나타나있다.
이렇게 반환한 데이터를 다양한 플랫폼의 클라이언트에게 제공하는 API 서버 역할을 하는 것이 DRF인 것이다.
그런데 DRF는 주로 JSON 데이터를 반환한다고 설명했었는데, 위의 예시에서는 순수 텍스트를 반환하고 있다. 실제로 DRF가 순수 텍스트를 반환하는 경우는 많이 없고, 일반적으로 Django의 모델 객체를 JSON 문자열으로 변환(직렬화)한 결과를 반환하게 된다.
Django의 모델로부터 추출한 queryset 또는 모델 객체를 JSON 타입으로 변환해주기 위해서는 바로 DRF Serializer가 필요하다. 이번 포스팅에서는 DRF가 무엇인지에 대해 설명하는 것이 주 목적이었으니, DRF Serializer에 대해서는 다음 포스팅에서 다뤄보도록 하겠다.
https://kimcoder.tistory.com/597
'Django Rest Framework' 카테고리의 다른 글
[DRF] 공식 문서 요약(1) - Serializers (0) | 2023.05.07 |
---|---|
[DRF] BasePermission으로 커스텀 권한 만들기 (0) | 2023.03.09 |
[DRF] DRF 뷰의 발전 과정 (0) | 2023.02.23 |
[DRF] DRF Serializer (0) | 2023.02.21 |
댓글