1.注册容联云
容联云地址:https://www.yuntongxun.com/
注册成功把账号信息复制保存下来
2.同步发送短信
2.1 安装SDK
pip install ronglian_sms_sdk
2.2 发送短信调用
在子应用下的utils.py
from ronglian_sms_sdk import SmsSDK
import json
accId = "8aaf07088185853e01818a75a87a016f"
accToken = "6b755e025dc2436a8e3b7b82ef9ac20c"
appId = "8aaf07088185853e01818a75a9a00176"
# 定义发送短信的函数
def send_message(sms_code,mobile,expire=5):
"""
:param sms_code: 要发送的验证码
:param mobile: 发送的手机号
:param expire: 过期时间
:return:
"""
# 实例化sdk对象
sdk = SmsSDK(accId = accId,accToken=accToken,appId=appId)
# 准备数据
tid="1"
datas = ("%s"%sms_code,"%s"%expire) # 元组
# 发送短信
res = sdk.sendMessage(tid=tid,mobile=mobile,datas=datas)
# 解析json字符串
data = json.loads(res)
print("容联云响应的数据:",data)
if data.get('statusCode') == '000000':
return True
return False
2.3生成、验证短信验证码
在视图中
# 短信验证码视图
import redis
from .utils import send_message
from .tasks import send_message
class SmsCodeAPIView(APIView):
# 发送短信验证码
def get(self,request):
# 1.获取前端手机号
mobile = request.query_params.get("mobile")
# 生成随机码
sms_code = str(random.randint(10000,99999))
result = send_message(sms_code,mobile)
# 同步发送验证码
result = send_message(sms_code,mobile)
if result:
# 存储短信验证码到redis当中
r =redis.Redis(host='127.0.0.1',port=6379,password='123123')
key = "sms_%s"%mobile
r.set(key,sms_code,ex=300)
return Response({"code":200,"msg":'发送短信验证码成功',"sms":sms_code})
else:
return Response({"code":400,"msg":'发送失败'})
# 验证短信验证码
def post(self,request):
# 获取前端手机号、验证码
mobile = request.data.get("mobile")
sms_code = request.data.get("sms_code")
# 获取存储的验证码
r = redis.Redis(host='127.0.0.1',port=6379,password='123123')
key = "sms_%s"%mobile
stored_code = r.get(key).decode()
if not stored_code:
return Response({
"code":400,
"msg":'验证码过期'
})
if sms_code == str(stored_code):
return Response({
"code":200,
"msg":'验证成功'
})
return Response({
"code":400,
"msg":'验证失败'
})