이번 2차 프로젝트를 진행 하며 로그인, 회원가입 뷰 작성을 하기 위해
외부 api를 활용해 문자를 보내는 뷰 작성을 진행 하였다.
Twilio는 캘리포니아 샌프란시스코에 기반을 둔 서비스 회사로서의 미국 클라우드 통신 플랫폼입니다. Twilio를 통해 소프트웨어 개발자는 웹 서비스 API를 사용하여 프로그래밍 방식으로 전화를 걸고 받고, 문자 메시지를 보내고 받고, 기타 통신 기능을 수행 할 수 있습니다.
SMS을 활용한 인증을 찾아보던 중 많은 분들이 Twilio를 활용하여 뷰 작성을 하여 회원가입 후 사용을 진행하였다.
pip install twilio 필요! , 자세한 사항은 사이트에서 확인 필요
import json
import bcrypt
import re
import requests
from twilio.rest import Client
from django.views import View
from django.http import JsonResponse
from random import randint
from users.models import User, PhoneCheck
from my_settings import ACCOUNT_SID, AUTH_TOKEN
class SendSmSView(View):
def post(self, request):
try:
#멘토님의 리뷰수정을 거듭하며 try를 사용법에 대해 조금 더 알게 되었다.
data = json.loads(request.body)
input_mobile = data['mobile']
if not re.match(r"(010)\d{4}\d{4}",input_mobile):
return JsonResponse({'message':'INVALID_PHONE_NUMBER'}, status=401)
to_mobile = '+82'+ input_mobile[1:]
# 메세지를 보내기 위해 번호 +821012344321 형식으로 변경
check_number = randint(1000,9999)
# 인증번호 무작위 생성
if not PhoneCheck.objects.filter(check_id=input_mobile).exists():
PhoneCheck.objects.create(check_id=input_mobile, check_number=check_number)
PhoneCheck.objects.filter(check_id=input_mobile).update(check_number=check_number)
# 인증 핸드폰 및 인증 번호 DB 생성, 인증 핸드폰 번호 존재 시 인증번호 업데이트
# else 사용을 최대한 줄이는 연습을 해야함!
client = Client(ACCOUNT_SID, AUTH_TOKEN)
client.messages.create(
body =f'milliem의사서 인증을 위해 [{check_number}]을 입력해주세요.' ,
from_ ='+14078716367',
to = to_mobile
)
#twilio에서 제공하는 외부 API
return JsonResponse({'message': 'SUCCESS'}, status=200)
except KeyError:
return JsonResponse({'message':'KEY_ERROR'}, status=401)
이번 뷰 리뷰에서 try를 활용법 및 else 사용을 최대한 줄이는 것이 좋다는것을 알게 되었다.
물론 외부 api 사용도 할수 있다는 것을 배웠다 ! 뿌듯뿌듯