借助于第三方短信服务——腾讯云
腾讯云短信服务
帮助文档
-API:一堆web接口,基于API接口来写
-SDK:软件开发工具包软件,别人基于api接口,用不同语言封装的工具包,我们可以直接调用方法完成某些事
短信验证码接口
# 生成一个四位随机验证码
def get_code():
import random
s_code=''
for i in range(4):
s_code+=str(random.randint(0,9))
return s_code
def send_message(phone,code):
ssender = SmsSingleSender(settings.appid, settings.appkey)
params = [code, '3'] # 当模板没有参数时,`params = []`
try:
result = ssender.send_with_param(86, phone, settings.template_id, params, sign=settings.sms_sign, extend="", ext="")
if result.get('result') == 0:
return True
else:
return False
except Exception as e:
log.error('手机号:%s,短信发送失败,错误为:%s'%(phone,str(e)))
#settings.py
# 腾讯云SDK文档
# 短信的配置
# 短信应用 SDK AppID
appid = 140039846 # SDK AppID 以1400开头
# 短信应用 SDK AppKey
appkey = "fd972f6da15add4de47b50b8dbe930"
# 短信模板ID,需要在短信控制台中申请
template_id = 66935 # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 需要在短信控制台中申请
# 签名
sms_sign = "小猿取经" # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台中申请
# views.py
@action(methods=['GET'], detail=False)
def send(self,request,*args,**kwargs):
'''
发送验证码接口
:return:
'''
import re
from luffyapi.libs.tx_sms import get_code,send_message
from django.core.cache import cache
from django.conf import settings
telephone = request.query_params.get('telephone')
if not re.match('^1[3-9][0-9]{9}', telephone):
return APIResponse(code=0, msg='手机号不合法')
code=get_code()
result=send_message(telephone,code)
# 验证码保存(保存到哪?)
# sms_cache_%s
cache.set(settings.PHONE_CACHE_KEY%telephone,code,180)
if result:
return APIResponse(code=1,msg='验证码发送成功')
else:
return APIResponse(code=0, msg='验证码发送失败')