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 |