나만보는 Django vs Django Rest Framework(DRF) 비교





구분DJANGODJANGO-REST
1) 파이썬설치OO
2) DJANGO설치OO
3) RESTFRAMEWORK설치XO
4) VIRTUALENV 설치OO
5) DJANGO프로젝트 신규OO
6) APP 신규OO
7) SETTINGS.PY에 앱추가OO
8) MODELS.PY 수정OO
9) MODEL 마이그레이션OO
10) ADMIN.PY 수정OO
11) VIEWS.PY 수정OO
12) SERIALIZER.PY 생성XO
13) URL.PY 수정OO
14) SUPERUSER 생성OO
15) TEMPLATE 생성OX

1) 파이썬설치
pip3 install python3

2) DJANGO설치
pip3 install django

3) RESTFRAMEWORK설치
pip3 install djangorestframework

4) VIRTUALENV 설치
python3 -m venv 가상환경이름

5) DJANGO프로젝트 신규
django-admin startproject 프로젝트이름

6) APP 신규
python3 manage.py startapp 앱이름

7) SETTINGS.PY에 앱 추가
INSTALLED_APPS = [
...
'rest_framework',
'앱이름'
]

8) MODELS.PY수정
from django.db import models

# Create your models here.

class GoogleWeb(models.Model):
title = models.CharField(max_length=30)
link = models.URLField()
archive = models.BooleanField(default=False)

def __str__(self):
return self.title"

9) MODEL 마이그레이션
python3 manage.py makemigrations
python3 manage.py migrate

10) ADMIN.PY 수정
from django.contrib import admin
from .models import GoogleWeb
# Register your models here.

admin.site.register(GoogleWeb)

11) VIEWS.PY 수정
from django.shortcuts import render

from rest_framework import viewsets
from .serializers import GoogleWebSerializer
from .models import GoogleWeb

class GoogleWebViewSet(viewsets.ModelViewSet):
queryset = GoogleWeb.objects.all()
serializer_class = GoogleWebSerializer"

- rest_framework에서 viewsets을 import - serialzers에서 앱Serializer import - viewsets = list(전체오브젝트보기), create(개별오브젝트생성), retrieve(개별오브젝트보기), update(개별오브젝트수정), destory(개별오브젝트삭제) - 기본 viewsets 외에 라우팅이 필요한 임시메소드는 @action 데코레이터를 사용 - 개별오브젝트관련액션: @action(detail=True, methods=['post'] def extra_method(self. request, pk=None): - 전체오브젝트관련액션: @action(detail=False, methods=['post'] def extra_method2(self.request):


12) SERIALIZER.PY 생성
from rest_framework import serializers
from .models import GoogleWeb

class GoogleWebSerializer(serializers.ModelSerializer):
class Meta:
model = GoogleWeb
fields = ('id', 'title', 'link', 'archive')

- rest_framework에서 serializers를 import - 개별앱에 대한 Serializer class를 만들고, fBrowsable API에 보여줄 field값을 추가


13) URL.PY 수정
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from google_web.views import GoogleWebViewSet
router = routers.DefaultRouter()
router.register('google_web', GoogleWebViewSet)

urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
]

- rest_framework에서 routers를 import - 개별앱(view)로부터 viewset import - router = routers.DefaultRouter() 변수지정 - router의 register 메소드를 사용하여 개별앱의 viewset에 따른 url (자동)생성 - path("", include(router.urls)) 추가


14) SUPERUSER 생성
python3 manage.py createsuperuser

15) TEMPLATE 생성




<django rest framework 사용후기>
- view.py의 viewset이 DRF의 요체: 코드 몇줄 추가로 django 쿼리셋을 REST API로 접근가능
viewsets = list(전체오브젝트보기) + create(개별오브젝트생성) + retrieve(개별오브젝트보기) + update(개별오브젝트수정) + destory(개별오브젝트삭제)
- django에서도 위 기능들을 구현할수 있지만, (퍼포먼스를 무시하면) 편의성 측면에서 DRF를 사용하지 않을 이유가 없어보임
- @action 데코레이터로 라우팅이 필요한 custom 메소드 구현 가능( DRF 3.8버전부터 기존 detail_route(--> @action(detail=True)와 list_route(--> @action(detail=False)를 대체)
- 금번 프로젝트에서는 front를 네티이브(안드로이드)로 구현하였으나, 요즘뜨는 react나 vue.js도 접목할수 있어 front-back의 완전한 구조분리(completely decoupled architecture)가 가능

댓글 없음

Powered by Blogger.