시리얼라이즈
: Article 모델 -> json 형식으로 바꾸는 것.디시리얼라이즈
: json 데이터 -> Article 모델html에서는 form-data 형식으로 전달했다.
drf는 application/json을 써서 전달한다.
json으로 돌려주는 backend를 만들었다.
# article/serializers.py
from rest_framework import serializers
from articles.models import Article
# 시리얼라이저란? 모델에 입력한 걸 계속 쓰지 않기 위한 drf 도구
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__' # 모든 필드를 다루겠다.
이걸 views에서 쓰려면
# article/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from articles.models import Article
from articles.serializers import ArticleSerializer # 시리얼. 추가
# Create your views here.
@api_view(['GET', 'POST'])
def index(request):
if request.method == 'GET':
articles = Article.objects.all()
article = articles[0]
# article_data = {
# "title":article.title,
# "content":article.content,
# "created_at":article.created_at,
# "updated_at":article.updated_at,
# }
# return Response(article_data)
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
가져온 articles 데이터를 시리얼라이저에 넣어준다.
시리얼라이저 안에 data라는 어트리뷰트가 있다.
elif request.method == 'POST': # 디시리얼라이즈
serializer = ArticleSerializer(data = request.data)
if serializer.is_valid():
serializer.save()
# print(serializer.data)
# print(request.data['title'])
return Response(serializer.data)
else:
print(serializer.errors)
return Response(serializer.errors)
에러가 뜨지 않게 하려면 articles/models.py에 가서
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(null=True, blank=True)
# DB에서 빈 값이어도 되는가, 검증 과정에서 빈 값이어도 되는가.
def __str__(self):
return str(self.title)