본문 바로가기
FrameWork/Django

DRF(Django Rest Framework)

by mansoorrr 2024. 7. 17.

Django에서 Json으로 받아 화면에 표출하는 방법에는 2가지가 있다.

1. JsonResponse 사용: json 문자열을 표출할때

2. Serializer 사용: Querysets과 같은 객체를 json으로 표출할때

 

 

[JsonResponse]

  • JsonResponse({'ok':True}) 처럼 사용함
#---------- category/views.py
from django.http import JsonResponse

def all_categories(request):
	return JsonResponse({'ok':True})

 

 

[Serializer]

  • Querysets과 같은 객체를 넣기 위해 사용함
  • django.core.serializers 에 있음
  • 커스텀하기 어려움이 존재
#---------- category/views.py
from django.http import JsonResponse
from categories.models import Category
from django.core import serializers

def all_categories(request):
	all_category = Category.objects.all()
	return JsonResponse({
    	'ok': True,
    	'category': serializer.serialize('json', all_category)
    })

 

 

[Django Rest Framework]

  • serializer의 단점(커스텀하기 어려움, 보기 어려움 등)을 보완하기 위해 Django Rest Framework를 사용함
  • DRF는 데코레이터를 활용하여 api_view()를 호출해 사용함
  • 그리고 Json으로의 응답은 DRF의 Response를 사용한다
  • pip install djangorestframework 실시
  • config/settings.py의 CUSTOM_APPS에 'rest_framework' 등록
  • 실행하면 fastapi의 docs와 비슷한 화면이 나옴(함수명, methods, return 등 정보가 나타남)
#----------- category/views.py  수정

from django.http import JsonResponse
from django.shortcuts import render
from rest_framework.decorators import api_view #수정
from rest_framework.response import Response #수정

from categories.models import Category



# Create your views here.
@api_view() #수정
def all_categories(request):
    all_category = Category.objects.all() 
    return Response({  #수정
        'ok': True,
    })

 

  • DRF도 Querysets같은 객체를 json으로 변환하기 위해서는 serializer가 필요
  • rest_framwork.serializer가 존재함
  • serializers.py파일을 만들어서 적용
    • fastapi의 response시 적용될  스키마를 만든다고 생각하면 됨
    • 모델에 있는 필드들 중 나타내고 싶은 필드와 해당 필드의 타입을 적어야 함
#---------- categories/serializers.py
from rest_framework import serializers

class CategorySerializer(serializers.Serializer)
	name = serializers.CharField()
    kind = serializers.CharField()
    created_at = serializers.DateTimeField() #CommonModel에서 상속받은 컬럼(이런것도 가능)
    

#---------- categories/views.py
from django.http import JsonResponse
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response

from categories.models import Category
from categories.serializers import CategorySerializer


# Create your views here.
@api_view()
def all_categories(request):
    all_category = Category.objects.all() #모든 리스트를 가져왔음
    serializer = CategorySerializer(all_category, many=True) #serializer 적용, all_category는 리스트이므로 many=True를 적어줌
    return Response({
        'ok': True,
        'category': serializer.data
    })

'FrameWork > Django' 카테고리의 다른 글

DRF UPDATE * DELETE  (0) 2024.07.18
DRF POST & validate & save  (1) 2024.07.18
Templates Rendering  (0) 2024.07.17
URL & views  (0) 2024.07.17
ORM  (0) 2024.07.15