class PhoneAuthCreateView(APIView):
"""
전화 번호 인증 요청 (회원가입)
---
"""
permission_classes = (permissions.AllowAny,)
@swagger_auto_schema(
request_body=PhoneAuthCreateSerializer,
responses={200: PhoneAuthCreateResponseSerializer},
)
def post(self, request):
serializer = PhoneAuthCreateSerializer(data=request.data)
if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
agent_id = serializer.validated_data.get("agent_id")
phone_number = serializer.validated_data["phone_number"]
if agent_id is not None:
existPhoneMember = Member.objects.filter(
member_agent__agent_id=agent_id, hand_phone=phone_number
)
if existPhoneMember.count() > 0:
member_id = existPhoneMember.first().id
raise apiexceptions.ValidationError(
detail=member_id,
code="EXIST_PHONE_NUMBER",
user_message="해당 업체에 가입이 되어있는 ID입니다.",
)
# else:
# existPhoneMember = Member.objects.filter(hand_phone=phone_number)
# 한 휴대폰 번호로 여러 계정 가입 가능
result = PhoneAuthHelper.saveAuthNum(phone_number)
res = PhoneAuthCreateResponseSerializer(result)
return Response(res.data)
AllowAny객체를 permission_classes 변수에 할당permission_classes를 빈칸으로 놓는 것 보다 AllowAny를 할당하는 것이 의미전달에 좋다고 기입되어있다. class AllowAny(BasePermission):
"""
Allow any access.
This isn't strictly required, since you could use an empty
permission_classes list, but it's useful because it makes the intention
more explicit.
"""
def has_permission(self, request, view):
return True
serializer 형식이 스웨거 문서에 표시된다.request_body 부문에 serializer 기입 시 요청 보낼 데이터 형식을 스웨거 문서에 표시해준다.def post(self, request):
serializer = PhoneAuthCreateSerializer(data=request.data)
if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
agent_id 와 hand_phone 값을 갖고 filter를 걸어서 테이블 Member에서 해당하는 레코드를 가지고온다. 만일 레코드가 있다면 해당 번호와 해당 아이디가 Member 테이블에 존재한다는 것이고 이것은 해당 아이디와 비밀번호로 가입한 내력이 있다는 의미가 되어 예외를 발생시킨다.agent_id = serializer.validated_data.get("agent_id")
phone_number = serializer.validated_data["phone_number"]
if agent_id is not None:
existPhoneMember = Member.objects.filter(
member_agent__agent_id=agent_id, hand_phone=phone_number
)
if existPhoneMember.count() > 0:
member_id = existPhoneMember.first().id
raise apiexceptions.ValidationError(
detail=member_id,
code="EXIST_PHONE_NUMBER",
user_message="해당 업체에 가입이 되어있는 ID입니다.",
)
휴대폰 번호와 요청한 사용자의 agent_id를 JSON 형태로 반환한다.result = PhoneAuthHelper.saveAuthNum(phone_number)
res = PhoneAuthCreateResponseSerializer(result)
return Response(res.data)
해당 API에 오기까지 6개의 API를 다루면서 [GET, GET, POST, DELETE, PATCH, POST] 다루면서 이번 POST API를 이해하는데 있어 상대적으로 더 적은 시간이 들어갔다. 앞으로도 꾸준히 하면서 조금씩 실력을 늘려나가야겠다.