그러면 이제 url과 view를 작성하는 법은 대충 알았다.
이제는 로직을 작성해볼건데 작성하기전 serializer에 대해 좀 알고 있어야한다. (위 두줄 제거 생각해보기)
view의 내용은 api_view의 DRF 함수형뷰 api view 에서 이어진다.
간단히 설명하자면 serializer는 기본적으로 데이터가 보여야 하는 방식을 설명해주는 녀석이다.
django에선 필요 model을 검증하고 JSON 객체로 변환해준다.
일단 코드를 작성해본다.
# file을 새로 생성해준다.
# users/serializers.py
from rest_framework import serializers
class UserSerializer(seiralizers.Serializer):
"""
models.py에서 api 필드에서만 노출 시키고자 하는 속성만 빼내온다.
작성법은 models.py랑 비슷하다.
"""
name = serializers.CharField(max_length=140)
phone = serializers.CharField(max_length=13)
birthday = serializers.CharField(max_length=50)
일단 머리에 박고 있어야하는 개념 한가지는 django의 serializer는 python에서 JSON 객체로 바꿔주는것을 의미
한다.
or JSON객체에서 python 객체로 바꿔주는것
도 포함이다.
이제 view의 로직을 작성해보자 (위에 작성한 view 부분을 가져와 로직만 채워넣어본다)
# users/views.py
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import User
from .serializers import UserSerializer
@api_view(["GET"])
def list_user(request):
users = User.objects.all()
serialized_users = UserSerializer(user, many=True)
return Response(data=serialized_users.data)
이렇게 하면 정상적으로 페이지가 뜰거다. 하지만 이렇게 맨날 정상적으로만 뜬다면 얼마나 좋을까
UserSerializer를 호출하는 부분을 보면 many=True
가 있다 이 부분을 제거하고 serialized_users = UserSerializer(user)
만 입력하고 페이지를 reload 시켜보자 그러면 에러 내용이 상당히 긴걸 볼 수 있다.
보기 싫다고 안보지 말고 한번 차분히 보면 뭐 serializer 이름을 잘 못 지었네, 예외 텍스트, 쿼리 name 속성을 가지고 있지 않다고 하는데 다 맞는 말이긴 하지만 정확히 알아야할 내용은 우리가 위 코드 내용에서 query 한 걸 보면 all()
즉, User 전체를 불러오고 있다는걸 알 수 있다.
하지만 serializer 내용을 보면 한명의 User를 위한 내용이기에 여러 User에 대한 내용을 이해 못하는것이다.
이럴때 django에서는 친절하게 many=True를 사용함으로써 문제를 수정 할 수 있다.
이제 그러고 runserver를 하면 DB에 저장되어있는 User의 list를 볼 수 있을것이다.
그리고 코드에서 정의한 속성만 뽑아서 보여지고 있다.
serializer를 사용함으로 자연스레 JSON으로 변환되는걸 확인하고 나니 정말 많은걸 해주고 있다고 생각이 든다.
'Django' 카테고리의 다른 글
Django User model Custom (0) | 2021.06.29 |
---|---|
DRF ModelSerializer (0) | 2021.06.19 |
DRF 함수형 뷰 (@api_view) (0) | 2021.06.19 |
django rest framework에 대해서 (0) | 2021.06.19 |
(django template) typescript 적용시키기 (0) | 2021.03.13 |