Serializer 이용해서 create, read Article

Grace Goh·2022년 10월 26일
0

Django Rest Framework

목록 보기
5/36
  • 시리얼라이즈 : Article 모델 -> json 형식으로 바꾸는 것.
    즉 직렬화. object 형태로 구성된 것을 string으로 단순하게 출력하는 것.
  • 디시리얼라이즈 : 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)   
profile
Español, Inglés, Coreano y Python

0개의 댓글