장고 심화과정에 진입했습니다. 그간 장고에 대한 이해도가 조금 증가한 것 같아 어느정도 자신이 있는 상황이였는데 뭔가 전혀다른 내용을 배우는듯한 기분이 들더군요.. 다시 처음부터 배운다는 마인드로 임하고 오늘 배운 것들을 정리하고자 합니다.
Django REST Framework
의 줄임말로 장고를 기반으로 REST API
서버를 만들기 위한 라이브러리를 뜻으로 Django
만 사용했을 때에는 주로 Html
을 응답해줬지만 DRF
는 JSON
을 응답하는 편입니다.
장고가 프론트와 백엔드 모두 가능한 전천후 풀스택 프레임워크이긴 하지만 다른 사람들과 협업을 하다보면 다른 프레임워크들과 만날 수 밖에 없는데 그럴때 다른 프레임워크에서도 장고의 데이터를 이해하기 위해 시리얼라이저가 필요합니다. 데이터를 변환할 때 주로 JSON
과 XML
이 있습니다.
먼저 게시글 모델을 다음과 같이 만들고
# models.py
from django.db import models
from users.models import User
class Article(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
content = models.TextField()
image = models.ImageField(blank=True, upload_to='%Y/%m/')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.title)
게시글 생성을 위한 시리얼라이저는 이렇게 만들 수 있었습니다.
# serializers.py
class ArticleCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ("title", "image", "content")
게시글을 생성하는데 위의 모델의 항목을 모두 받을 필요는 없기에 위의 3항목에 대해서 입력받도록 만들었고 image의 경우 black=True를 가지고 있기에 사진이 누락되어도 괜찮습니다.
그리고 이를 사용해 게시글을 생성하는 함수를 만들어줄 수 있었습니다.
class ArticleView(APIView):
def post(self, request):
serializer = ArticleCreateSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data)
else:
return Response(serializer.errors)
post
방식일 때 serializer
라는 변수에 ArticleCreateSerializer
라는 시리얼라이저의 데이터를 할당하고 is_valid
를 통해 유효성 검사를 통과한다면 해당 데이터를 저장하고 해당 데이터를 리턴하게 만들고 그렇지 못한다면 에러메세지를 띄우게 만들었습니다.
해당 데이터를 리턴하는 이유는 포스트맨에서 작업할 때 그냥 확인용으로 만들어 둔 것이니 크게 신경쓰실 필요는 없습니다.