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를 이해하는데 있어 상대적으로 더 적은 시간이 들어갔다. 앞으로도 꾸준히 하면서 조금씩 실력을 늘려나가야겠다.