第一次注册使用白送你200条,美滋滋python
点点点操做就完事了,要想发送短信,必需要申请签名和模板。签名类型能够使用网站,公众号,小程序,appredis
填好信息,上传指定的截图凭据便可。网站建立签名须要上传域名备案里面的备案号等信息django
接下来须要建立短信内容模板,按照提示写就行。模板里面能够挖坑,接下来能够在坑里面填验证码,过时时间一类的小程序
还须要在应用管理中建立应用。系统会默认建立一个应用,也能够本身新建立。应用里的SDK AppID和 AppKey接下来程序里面会做为配置参数api
https://cloud.tencent.com/document/product/382/11672缓存
上面是腾讯云sdk2.0的官方文档,3.0功能态度,2.0就足够好用了app
首先安装腾讯云sdk2.0的模块,使用虚拟环境的话注意检查一下有没有装上dom
pip install qcloudsms_py
准备必要参数函数
# 短信应用 SDK AppID appid = 1400009099 # SDK AppID 以1400开头 # 短信应用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 须要发送短信的手机号码,看需求来,做为参数传入下面的函数 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,须要在短信控制台中申请 template_id = 7839 # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 须要在短信控制台中申请 # 签名 sms_sign = "腾讯云" # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名须要在短信控制台中申请
单发短信网站
from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError ssender = SmsSingleSender(appid, appkey) params = ["5678","2"] # 用来填进短信模板的坑,好比5678是验证码,2是失效时间 try: # phone_numbers是须要发送短信的手机号,按实际状况传参便可 result = ssender.send_with_param(86, phone_numbers[0], template_id, params, sign=sms_sign, extend="", ext="") except HTTPError as e: print(e) except Exception as e: print(e) print(result)
注意单发和群发的方法不同,具体能够查看官方文档
咱们能够把像sdk发送短信这样的第三方功能放进libs里,把配置参数拉出来写在libs的settings里,便于管理和扩展
settings.py
导入到发送短信的功能文件,里面写配置参数
# settings.py # 短信应用 SDK AppID appid = 1400009099 # SDK AppID 以1400开头 # 短信应用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 须要发送短信的手机号码,看需求来,做为参数传入下面的函数 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,须要在短信控制台中申请 template_id = 7839 # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 须要在短信控制台中申请 # 签名 sms_sign = "腾讯云" # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名须要在短信控制台中申请
send_sms.py
# send_sms.py 放功能代码 from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError # 导入腾讯云的模块 from luffyapi.utils.logging import log # 导入日志模块,短信发送失败的时候纪录 from . import settings # 同级目录导入配置参数 # 生成随机4位验证码,在视图中调用 def rand_code(): import random rd_code = '' for i in range(4): rd_code += str(random.randint(0,9)) return rd_code # 单发短信功能 def send_sms(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: print(e) log.error(f'{phone}:短信发送失败,错误为{str(e)}')
视图函数中
class LoginView(ViewSet): # 发送短信验证码 @action(methods=['GET'], detail=False) def send(self,request,*args,**kwargs): phone = request.query_params.get('phone') if not re.match('^1[3-9][0-9]{9}$',phone): return APIResponse(code=0,msg='手机号格式错误') code = send_sms.rand_code() result = send_sms.send_sms(phone,code) # 发送验证码 # 验证码存进缓存,以后换成redis,缓存的key放在settings的const里 cache.set(settings.PHONE_CACHE_KEY%phone,code,180) if result: return APIResponse(code=1,msg='发送成功') else: return APIResponse(code=0,msg='发送失败')