데브코스/Week 5
Week 5 - 3
out_of_anjoong
2024. 4. 10. 17:30
Serializers
serialize : Model Instance나 QuerySet과 같은 데이터를 JSON 형식의 파일로 변환
deserialize : JSON 형식의 데이터를 다시 Model Instance로 변환
API 서버에서는 JSON 형식으로 데이터를 주고받기 때문에 해당 작업이 필요하다.
# serializers.py
from rest_framework import serializers # pip install djangorestframework 필요
from polls.models import Question
class QuestionSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
question_text = serializers.CharField(max_length=200)
pub_date = serializers.DateTimeField(read_only=True)
# serialize를 할 때는 모델의 각 필드를 다 입력하여야 한다.
# serializer은 생성을 할 때 유효성 검사를 하며 통과한 데이터는 validated_data로 주어짐.
def create(self, validated_data):
return Question.objects.create(**validated_data)
def update(self, instance, validated_data):
# validated_data.get('question_text', instance.question_text) question_text를 가져오고 못가져 온다면 instance.question_text로 유지해라.
instance.question_text = validated_data.get('question_text', instance.question_text)
instance.save()
return instance
class Meta:
model = Question
fields = ['id','question_text', 'pub_date']
# 일일이 create, update를 정의할 필요 없이 위 코드를 이용하면 자동으로 생성됨.
HTTP Methods
CRUD : CREATE, READ, UPDATE, DELETE
- GET : 요청한 데이터를 받을 때 사용 (READ)
- POST : 특정 리소스에 엔티티를 제출할 때 사용. (CREATE)
- PUT : 내용을 수정 (UPDATE)
- DELETE : 특정 리소스를 삭제 (DELETE)
def question_detail(request, id):
question = get_object_or_404(Question, pk=id)
if request.method == 'GET':
serializer = QuestionSerializer(question)
return Response(serializer.data)
if request.method == 'PUT':
serializer = QuestionSerializer(question, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if request.method == 'DELETE':
question.delete()
return Response(status=status.HTTP_204_NO_CONTENT)