-
[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가 어떤 필드를 사용하여 데이터를 직렬화할지를 정의합니다. 즉, 어떤 데이터가 클라이언트로 전송되거나 데이터베이스에 저장될지를 결정합니다. 이 경우, RegistrationSerializer는 User 모델의 여러 필드 중에서 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