상세 컨텐츠

본문 제목

[django] restful-api 사용하기

DEVELOPMENT/django

by 김도훈 2020. 11. 28. 22:22

본문

반응형

 

DRF란

백엔드(Django)와 프론트를 분리하기 위해서 사용한다.Django내에서 템플릿 작업까지 모두 마친다고 하면, 사실 DRF까지 필요 없겠지만, 프론트와 백엔드 개발자가 나뉘어서 함께 협업해야 하는 경우 등에 사용할 수 있다.

DRF를 사용하여 특정 uri로 get/post/put/delete/ 등의 요청을 하면, 데이터를 받아올 수 있게되고 이 데이터를 프론트에서 구독해서 개발을 진행한다.

django만 사용하면 {{% '---' %}} 식으로 django filter를 이용하여 직접 템플릿에 입력하는데 이러는경우, 개발자간의 혼란이 유발될 수 있다.

https://www.django-rest-framework.org/

 

Home - Django REST framework

 

www.django-rest-framework.org

적용하기

1. 설치하기

pip를 통해 설치한다.

pip install djangorestframework

 

2. 셋팅하기

settings.py

당연하게도 settings.py 파일에 설치한 라이브러리를 등록해주어야 한다.

INSTALLED_APPS = [

    ...

   'rest_framework',

]

 

serializer 만들기

Serializer는 Django Rest Framework에서 나온 새로운 요소이다. 번역하자면 직렬화 라고 할 수 있는데, 말 그대로, 간단하게 파이썬 데이터를 JSON 타입의 데이터로 변환해준다 라고 생각하면 된다. URI를 통해 데이터를 요청하면 urls.py에 있는 뷰를 따라 데이터를 보내게 되고, 이때 뷰에서는 Serializer를 통해 내가 만든 모델로부터 뽑은 queryset 데이터를 JSON으로 변환해주는 것이다. 기본적으로 웹에서 통신을 할 때, 대표적인 타입이 JSON이나 XML인데, 대부분의 REST API에서는 JSON으로 주고 받는다.

project 폴더 안의 django를 통해 생성한 app내 serializer.py를 만들어서 준비한다.

//appname.serializer.py
from rest_framework import serializers
from 'appname'.models import 'Mymodel'

class MymodelSerializer(serializers.ModelSerializer):
    class Meta:
        model = 'Mymodel'
        fields = ('field1','field2')

 

viewset 만들기

viewset 아래에 메서드가 들어가있다. get/post/delete 메서드에 따라 별도 동작을 구현할 수 있다. 같은 viewset이라도 get/post/delete가 공존하고, serializer도 필요한 경우 공유할 수 있다.

//views.py
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework import viewsets
from rest_framework.views import APIView
from rest_framework.response import Response

from .models import 'Mymodel'
from .serializer import 'MymodelSerializer'

class 'MymodelViewSet'(APIView):
    def get(self, request, format=None):
        queryset = 'Mymodel'.objects.all()
        serializer ='MymodelSerializer'(queryset, many=True)
        return Response(serializer.data)

class 'MymodelDetailViewSet'(APIView):
    def get(self, request, id , format=None):
        queryset = 'Mymodel'.objects.get(id=id)
        serializer = 'MymodelSerializer'(queryset, many=False)
        return Response(serializer.data)
    def post(self, request, format=None):
        new_content = request.data['content']
        new_title = request.data['title']
        Post.objects.create(content=new_content, title=new_title)
        return Response("Post added!")
    def delete(self, request, id, format=None):
        queryset = 'Mymodel'.objects.get(id=id)
        queryset.delete()
        return Response("Post deleted")

urls.py

보기 편한 url을 설정한 뒤 위의 viewset을 연결해주면 된다.
그 뒤 해당 url을 테스트서버로 접속하면 api에서 제공하는 화면을 통해 데이터 확인이 가능하다.

//urls.py
from django.urls import path
from django.conf.urls import url
from 'Myapp' import views

urlpatterns = [
    ....
    url(r'^api/post/$', views.'MymodelViewSet'.as_view(), name="post"),
    url(r'^api/post/(?P<id>\d+)/$', views.'MymodelDetailViewSet'.as_view(), name="detail"),
]

 

반응형

'DEVELOPMENT > django' 카테고리의 다른 글

[Python] 데코레이터(Decorator)  (0) 2020.12.06
[django] JWT 사용하기  (0) 2020.11.28
[django] AWS S3와 연동하기  (0) 2020.11.26
[django] seed 편하게만드는 방법, django_seed  (0) 2020.10.16
[django] 유저 다중모델  (0) 2020.10.16

관련글 더보기

댓글 영역