유저등록 POST API 테스트 하기
유저에 대한 CRUD API를 계속해서 작성해보도록 하자.
이번에는 유저등록 부분이다. POST API
테스트를 해보도록 하자!
저번 포스팅에서 이미 모든 CRUD API
가 포함된 ModelViewSet
클래스를 상속하여 View를 생성했었기 때문에 POST API
테스트를 위해서 추가 작업은 필요하지 않다.
하지만, 현재 PostUserViewSet
View 클래스는 PostUser
Model의 모든 데이터를 반환하기 때문에 효율적이지 않다. 필요한 데이터만 클라이언트에게 받아서 회원등록 POST API
을 테스트 해보자.
일단 PostUser
Model의 Serializer
를 POST API
용으로 하나 더 만들자.
velog_series_01/dashboard/dashboard_core/serializer.py
파일을 열고, 아래와 같이 PostUserPostSerializer
클래스를 추가한다.
class PostUserPostSerializer(serializers.ModelSerializer):
class Meta:
model = PostUser
fields = ("username","password",)
위 코드에서 확인할 수 있듯이 PostUser
Model 신규데이터 등록에 필요한 필드는 POST API
테스트를 보다 간편하게 만들기 위해서 username
과 password
으로만 제한하였다.
위 코드를 추가한 후에 serializer.py
파일의 전체 코드는 아래와 같다.
from django.db.models import fields
from rest_framework import serializers
from dashboard_core.models import Post, PostUser
class PostSerializer(serializers.ModelSerializer):
title = serializers.CharField()
contents = serializers.StringRelatedField()
created_at = serializers.DateTimeField()
class Meta:
model = Post
fields = "__all__"
class PostUserSerializer(serializers.ModelSerializer):
username = serializers.CharField()
class Meta:
model = PostUser
fields = "__all__"
class PostUserPostSerializer(serializers.ModelSerializer):
class Meta:
model = PostUser
fields = ("username","password",)
마지막으로 views.py
파일을 열어서 PostUserViewSet
클래스를 아래와 같이 수정하여 PostUserPostSerializer
클래스를 추가한다.
class PostUserViewSet(ModelViewSet):
queryset = PostUser.objects.all()
def get_serializer_class(self):
if self.action == 'create':
return PostUserPostSerializer
else:
return PostUserSerializer
위 코드를 적용함으로써 클라이언트로부터 POST
요청이 오면, ModelViewSet
클래스에 적용하는 Serializer
클래스를 PostUserPostSerializer
로 바꿔준다.
이제 Advanced REST client
로 아래와 같이 POST
로 유저등록 데이터와 함께 Request
를 보낸다.
아래처럼 서버로부터 201 OK
메시지가 도착하였다.
정상처리가 되었음을 의미한다!
이제 직접 웹브라우저에서 방금 추가한 유저정보가 로드되는지 확인해보자.
http://127.0.0.1:8000/users/
아래에서 우리가 방금 추가했던 유저정보가 등록되어있음을 알 수 있다!
이번 포스팅에서는 PostUser
Model의 POST API
테스트를 해보았다.
다음에는 이어서 UPDATE API
테스트에 대해서 알아보겠다.
Thank you!