Django Rest Framework

정선용·2022년 5월 4일
0

Django REST Framework(DRF)

django 안에서 RESTFUL API Server를 쉽게 구축할 수 있도록 도와주는 오픈소스 라이브러리.

  • DRF의 장점
    • web Browsable API. 웹 브라우저 개발에 친화적인가보다.
    • 인증정책을 쉽게 해주나보다 (OAuth1, OAuth2를 위한. )
    • Serialization ORM and Non-ORM 둘 다 지원. : GOOD
    • 원하는 대로 바꿀 수 있는 강력한 커스텀 기능.
  • Basic Django와 뭐가 다른지.
구분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

django rest framework는 template가 존재하지 않고(mvt의 template, mvc의 view역할)
Serializer 가 존재한다는 것이 차별점. 프론트와 백 완전 분리 가능.
DRF는 서버와 클라이언트 사이에 JSON형식의 데이터만 상태를 표시하며 주고 받는다
JSON을 문자열로 바꾸는 방식인 직렬화(Serialization)를 이용
views.py의 viewset이 DRF의 핵심을 담당한다. django queryset을 REST API로 접근할 수 있또도록 해준다. (list,create,retrieve,update,destroy)

  • 차이 예시

Django

# urls.py
from django.contrib.auth import views as auth_views # views를 import
urlpatterns = [ # url 패턴에 매칭할 views와 template name 지정
    path('login/', auth_views.LoginView.as_view(template_name='common/login.html'), name='login'), 
    path('signup/', views.signup, name='signup'), # signup url로 요청이 들어오면 views의 signup으로 매핑해준다.

#views.py
def signup(request): # 함수명으로 url이 매핑시켜주면 아래 로직을 실행한다.
    
    if request.method == "POST":
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
            username=form.cleaned_data.get('username')
            raw_password= form.cleaned_data.get('password1')
            user=authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('sunyong:index')
    else:
        form = UserForm()
    return render(request, 'common/signup.html', {'form':form}) # view 전달 ***
    

DRF


#urls.py
from .views import *

urlpatterns = [
    path('info/menu', CategoryView.as_view()), # view를 매핑한다. 이 때 특정 함수를 지정하지 않았다. 
    

#views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Category
from .serializers import CategorySerializer


class CategoryView(APIView): ### API VIEW : DJango Rest를 상속받는다 ***
    # function based view와 class based view가 존재하는데,  CBV로 작성되었다. (HTTP method가 클래스 안에서 나누어져 처리된다.
    @staticmethod
    def get(request): 
        category_dict = dict()
        category_objects = Category.objects.all()
        data = CategorySerializer(category_objects, many=True).data
            for category in data:
                category_dict[key] = dict()

            return_data = {
                'result': True,
                'response': category_dict
            }
            return Response(status=status.HTTP_200_OK, data=return_data)

        except Exception as e:
            logger.error(e.__str__())
            return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data=server_error_return)

	def post(...)
    ..
    

apiview를 상속받아 get, put, delete에 해당하는 함수 구현이 가능하며 serializer를 통해 데이터 처리가 가능하다. view를 전혀 전달하지 않음.

profile
정선용

0개의 댓글