□ Django 와 DRF 차이점
특징 | Pure Django | Django Rest Framework |
개발 목적 | 웹 풀스택 개발 | 백앤드 API 서버 개발 |
개발 결과 | 웹 페이지를 포함한 웹 서비스 | 여러 클라이언트에서 사용할 수 있는 API 서버 |
응답 형태 | HTML | JSON |
다른 파일 | templates | Serializers.py |
□ REST API 서버를 만들기 위한 라이브러리
□ 백엔드 서비스를 위해 JSON과 같은 규격화된 데이터 제공
□ JSON과 같은 양식으로 다양한 플랫폼의 클라이언트에게 데이터를 제공해줄 수 있는 API 서버 프로젝트임
□ 설치 및 실행
○ 설치(프로젝트 생성 및 app 생성 후)
pip install djangorestframework==3.13.1
○ 설치가 끝났다면 project > settings.py > INSTALLED_APPS에 추가해야함
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"rest_framework", #drf : rest framework
"example" #생성된 app명
]
□ DRF Serializer
○ Django에서 기존 뷰에서 템플릿으로 데이터를 HTML로 제공해주었다면 DRF는 Serializer가 그 역할을 수행함
○ 시리얼라이저(serializer)
- Django Models.py를 JSON 형태로 변환해주는 변환기
- 사전적의미 직렬화
- 직렬화는 Django 프로젝트에서 내가 만든 모델로부터 뽑은 queryset 즉, 모델 인스턴스를 JSON타입으로 바꿔줌
○ DRF 내에서 데이터를 저장할 때는 Django의 모델을 통해 저장함. 모델은 데이터베이스 테이블을 추상화한 개념이며 Django의 ORM을 통해 파이썬 문법으로 데이터를 처리해줌. 때문에 Django에서의 데이터는 파이썬 객체의 한 형태로 저장됨. 이런 데이터를 JSON 포맷으로 변환 및 보내주는 것이 Serializer 임.
○ 반대로 클라이언트가 데이터를 DRF서버에 보내주는 경우가 있는데, 즉, POST 요청을 보내는 API를 클라이언트가 사용해 데이터를 생성할 경우 클라이언트는 API 요청에 데이터를 JSON 등 문자열 형태로 입력해서 보내줘야함. 이때 JSON 등 문자열을 파이썬 데이터 객체로 변환하는 작업이 역직렬화, 즉, 디시리얼라이즈 Deserialize임.
○ Models.py 와 serializers.py
- Models.py (*기존에 생성한 app의 model)
from django.db import models
#example app에 대한 모델 Book 클래스 생성
class Book(models.Model):
bid = models.AutoField(primary_key=True) #book id
title = models.CharField(max_length=50) #book 제목
author = models.CharField(max_length=50) #book 작가
category = models.CharField(max_length=50) #book 분류
pages = models.IntegerField() #book 페이지수
price = models.IntegerField() #book 가격
published_date = models.DateField() #book 출판일
description = models.TextField() #book 요약
- serializers.py : serializers.Serializer 사용
from rest_framework import serializers
from .models import Book #example app의 모델에대한 값을 json 형태로 클라이언트에게 뿌려주려면 serialize 작업 필요
class BookSerializer(serializers.Serializer):
#example app의 model에서 json으로 변환할 데이터 필드 선언
bid = serializers.IntegerField(primary_key=True), #book id
title = serializers.CharField(max_length=50), #book 제목
author = serializers.CharField(max_length=50), #book 작가
category = serializers.CharField(max_length=50), #book 분류
pages = serializers.IntegerField(), #book 페이지수
price = serializers.IntegerField(), #book 가격
published_date = serializers.DateField(), #book 출판일
description = serializers.TextField() #book 요약
#post 방식으로 데이터 생성
def create(self, validated_data):
return Book.objects.create(**validated_data)
#post 방식으로 데이터 수정
def update(self, instance, validated_data):
instance.bid = validated_data.get("bid", instance.bid)
instance.title = validated_data.get("title", instance.title)
instance.author = validated_data.get("author", instance.author)
instance.category = validated_data.get("category", instance.category)
instance.pages = validated_data.get("pages", instance.pages)
instance.price = validated_data.get("price", instance.price)
instance.published_date = validated_data.get("published_date", instance.published_date)
instance.description = validated_data.get("description", instance.description)
instance.save()
return instance
- serializers.py : serializers.ModelSerializer사용
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ["bid","title","author","category","pages","price","published_date","description"]
※코드 간편화와 효율을 위해 serializers.ModelSerializer 활용 권장
'Python > Django Ⅱ' 카테고리의 다른 글
DRF 예제2 : 데코레이터, reponse 상태코드, FBV/CBV, mixins/generic 클래스 (0) | 2024.05.18 |
---|---|
Todo : Update (0) | 2024.05.15 |
Todo : Create, Read (0) | 2024.05.15 |
Django 게시물 수정하기 (0) | 2024.05.14 |
Django Form 기능 / 게시물 등록하기 (0) | 2024.05.14 |