ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DRF - User] 회원가입 API
    한이음 프로젝트 2023. 8. 21. 16:11

    이번 파트는 User model을 만든 것을 사용하여 User를 등록하는 기능을 만들겠습니다.


    • Serializers.py 작성
    • views.py 작성
    • urls.py 작성
    • postman 실행

    1. Serializers.py

    일단 user 앱을 만들었으니까 거기에 serializers.py를 만듭니다.

    serializers.py를 열고 아래의 코드를 작성해줍니다.

    class RegistrationSerializer(serializers.ModelSerializer):
        
        userIdx = serializers.IntegerField(read_only=True)
        password = serializers.CharField(max_length = 128,min_length = 8,write_only = True
        )
        password_check = serializers.CharField(max_length = 128,min_length = 8,write_only = True
        )
        
        class Meta:
            model = User
            fields = [
                'userIdx',
                'user_id', 
                'username',
                'phone',
                'email',
                'password',
                'password_check',
                ]
            
        def validate(self,data):
            if data['password'] != data['password_check']:
                raise serializers.ValidationError(
                    {"password": "비밀번호가 일치하지 않습니다."})
            return data
        
        def create(self, validated_data):
            user = User.objects.create_user(**validated_data)
            return user
    • read_only는 오직 데이터를 입력받는 것이 아닌 읽는 것만 한다는 뜻입니다.
    • write_only는 데이터를 오직 입력만 한다는 뜻입니다. 그렇기에 password 필디는 serializing할 대는 포함이 되지 않게 하기 위해서 사용합니다.
    • fields옵션은 Serializer가 어떤 필드를 사용하여 데이터를 직렬화할지를 정의합니다. 즉, 어떤 데이터가 클라이언트로 전송되거나 데이터베이스에 저장될지를 결정합니다. 이 경우, RegistrationSerializerUser 모델의 여러 필드 중에서 userIdx, user_id, username, phone, email, password, password_check 필드를 사용하여 데이터를 처리합니다.
    • validate에 있는 password와 password_check는 입력한 두개의 비밀번호가 일치하는지 확인하는 코드입니다.

    2. views.py

    class RegistrationAPIView(APIView):
        permission_classes = (AllowAny,) #인증이 안된 사람들도 전부다 접근이 가능하다는 뜻이다.
        serializer_class = RegistrationSerializer  #해당 시리얼라이즈를 사용한다고 선언
        
        def post(self, request):
            user = request.data 
            
            serializer = self.serializer_class(data=user) # 직렬화 해준다
            serializer.is_valid(raise_exception=True) #유효성을 확인함.
            serializer.save() #데이터베이스에 저장한다.
    
            return Response(serializer.data, status=status.HTTP_201_CREATED) # 직렬화된 데이터를 반환함.

     

    이렇게 작성해준다.

     


    3. urls.py

    방금 만든 RegisterationAPIView에 클라이언트들이 접근가능하게 url를 추가해줍니다.

    urls.py 파일을 만들고, 아래 코드를 입력합니다.

    urlpatterns = [
        path('register', RegistrationAPIView.as_view()),

     

    그리고 전체 url를 관ㄹ하는 urls.py에 코드를 추가해줍니다.

    from django.contrib import admin
    from django.urls import path, include #추가
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('users/', include('user.urls'), name='user'),  #추가
    ]

     


    4. postman

     

    /user/register url로 postman에서 post으로 요청을 한다.

    <request>

     

    <response>

    성공적으로 작성을 완료했습니다.

     

    참고 문헌

    [# DRF Project_User] 3. Registering New User(회원가입 기능) (tistory.com)

     

     

     

     

     

    '한이음 프로젝트' 카테고리의 다른 글

    [DRF- User& sms인증] 아이디 찾기  (0) 2023.09.12
    [DRF - SMS] 네이버 SMS 문자 인증 구현하기  (1) 2023.09.05
    [DRF - User] 로그인 API  (0) 2023.08.21
    [DRF - User] 커스텀 User -1  (0) 2023.08.21
    DRF 공부( python)  (0) 2023.07.31
Designed by Tistory.