본문 바로가기

Django

DRF 함수형 뷰 (@api_view)

users/urls.py

from django.urls import path
from . import views

app_name = 'users'

urlpatterns = [
  path("list/", views.list_users),
]

다음으로 view를 작성해보는데 함수형 뷰를 처음으로 작성해볼것이다. (물론 클래스형 뷰에 대해서도 알아 볼 것이다.)

# users/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(["GET"])
def list_user(request):
  return Response()

데코레이터를 이용해서 api_view를 view 함수 위에 선언만 해주면 된다.

근데 api_view만 선언해주면 끝인가? 아니다 HTTP Method에서 봤듯이 HTTP Method를 적어줘야 이 함수가 어떤 method일때 요청을 받는지 정해줘야한다.

위에서는 GET method 하나만 적어줬지만, CRUD에 쓰이는 GET, POST, PUT, DELETE method 다 적어도 문제 없다.
ex) @api_view(["GET", "DELETE", ...])

API를 위해서 어떤 method가 허용되어야하는지 잘 알아야한다.

그리고 중요한 부분이 있는데 함수안에 Response가 아니고 다른 내용들을 입력하고 호출 한다면 아래 이미지와 같은 에러가 발생 할것이다.

사진1

type이 아닌것을 받았다고 api 응답 해주기 위해선 response가 필요하다.
다행인건 django에선 response를 HTTP 패키지에서 import 해줄 수 있다. from rest_framework.response import Response

일단 빈 응답(Response())으로 해주고 runserver를 돌려보자

그러면 django에서 무료로 제공되는 api 페이지를 보여 줄거다. (만약, 또 다른 에러가 뜬다면 구글에 잘 검색해보자)

페이지가 정상적으로 뜬다면 상단 부분 (page-header)에 우리가 함수에 적용해놓은 method가 있을것이다.

한가지만 선언해서 확인하지말고 여러개 선언해보고 직접 눈으로 확인해보자.

'Django' 카테고리의 다른 글

DRF ModelSerializer  (0) 2021.06.19
DRF serializer  (0) 2021.06.19
django rest framework에 대해서  (0) 2021.06.19
(django template) typescript 적용시키기  (0) 2021.03.13
django settings.py 분리 시키기  (0) 2020.11.15