[django | user app] Build a Backend REST API - 24

Hyeseong·2021년 3월 4일
0

Add create user API👩‍🔧

바로 앞선 강의 22에서 test코드를 작성했는데요. 이제는 Pass하기위한 소스코드를 짜봐야겠조?---

구체적으로는 user request에 대응하는 serializer 소스코드를 짜볼거에요. -> 그리고 나서 request를 처리할 view를 짜는거고요. - > 마무리로 url을 짜서 API에 연결할 수 있도록 할게요.


본론

step1 serializers.py파일 생성 👨‍🏭

step2 UserSerializer 클래스 정의🤕

'get_user_model`을 임포트 할게요.
그리고 rest_framework에서 제공하는 serializers모듈을 임포트 할게요.

여기서 우리는 Modelsirializer를 상속받아서 UserSerializer클래스를 짜볼게요.

참고로 모델 시리얼 라이저에 대한 정의는 짧게 아래와 같아요.

fields = ('email', 'password', 'name')를 정의함으로써 읽거나 쓰기위한 필드 정의를 해주게되요. 유저생성에 쓰이게 되는 필드인데요. 추가로 다른 필드를 정의하길 원한다면 물론 추가해주면되요.

extra_kwargs = {'password': {'write_only' : True, 'min_length': 5}}는 추가적인 셋팅을 하기위한 Meta클래스의 변수인데요.여기에서는 password 필드에 추가설정(쓰기전용, 최소 5글자 제한)을 하도록 할게요.

아래 create()메소드를 정의할건데요. 첫번째는 클래스가 인스턴스 생성시 이를 받기위한 self를 넣고 다음으로 validated_data를 받습니다. 물론 사용되는건 client에서 post요청시 이메일, 아이디, 비밀번호와 같은 정보를 딕셔너리로 던져줄때 이를 받는 매개변수에요.

그리고 create(self, validated_data) 메서드의 validated_data는 HTTP POST요청시 만들어지는데요. 이때 만들어지는 json이 두 번째 인자에요.

from django.contrib.auth import get_user_model

from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    """Serializer for the users object"""

    class Meta:
        model = get_user_model()
        fields = ('email', 'password', 'name')
        extra_kwargs = {'password': {'write_only' : True, 'min_length': 5}}
    
    def create(self, validated_data):
        """Create a new user with encrypted password and return it"""
        return get_user_model().objects.create_user(**validated_data)

view작성🦸‍♂

generics?
CBV 이용시 정말 많은 이점이 있습니다. 아래 설명과 같이 거의 차려진 밥상과 같이 시리얼라이저를 가져와서 플러그를 꽂으면 끝나는 느낌이네요.1

CreateAPIView
post요청시 사용되는군요.

Used for create-only endpoints.
Provides a post method handler.
Extends: GenericAPIView, CreateModelMixin

네! 이게 끝이냐고요? 맞습니다. 한마디로 DB에 CreateAPIView를 이용하면 데이터 저장하는 것이 이렇게 단순하게 되요.

from rest_framework import generics

from user.serializers import UserSerializer, AuthTokenSerializer

class CreateUserView(generics.CreateAPIView):
    """Create a new user in the system"""
    serializer_class = UserSerializer

URL작성🙈

우선 user앱안에 urls.py파일을 만들게요.
app_name을 적고 user앱의 views를 임포트할게요. 그리고 path()메소드에 아래와 같이 작성할게요.

from django.urls import path

from user import views

app_name = 'user'

urlpatterns = [
    path('create/', views.CreateUserView.as_view(), name='create'),

]

test 통과

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글