前言
由于项目在注册、登录、找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做。
所以需要准备腾讯云账号和sms需要的签名已经模板,这么就不在交代,可以自己去申请
配置腾讯云sdk
安装sdk
pip3 install qcloudsms_py
创建发送短信文件
创建utils/tencent文件夹 在下面创建sms.qc
#!/usr/bin/env python
import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
from qcloudsms_py import SmsMultiSender, SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
from django.conf import settings
def send_sms_single(phone_num, template_id, template_param_list):
"""
单条发送短信
:param phone_num: 手机号
:param template_id: 腾讯云短信模板ID
:param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
:return:
"""
appid = settings.SMS_APPID
appkey = settings.SMS_APPKEY
sms_sign = settings.SMS_SIGN # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
sender = SmsSingleSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
except HTTPError as e:
response = {'result': 1000, 'errmsg': "网络异常发送失败"}
return response
def send_sms_multi(phone_num_list, template_id, param_list):
"""
批量发送短信
:param phone_num_list:手机号列表
:param template_id:腾讯云短信模板ID
:param param_list:短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
:return:
"""
appid = settings.SMS_APPID
appkey = settings.SMS_APPKEY
sms_sign = settings.SMS_SIGN # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
sender = SmsMultiSender(appid, appkey)
try:
response = sender.send_with_param(86, phone_num_list, template_id, param_list, sign=sms_sign)
except HTTPError as e:
response = {'result': 1000, 'errmsg': "网络异常发送失败"}
return response
这里需要三个参数我这里是通过在setting中配置然后引用的
setting配置如下
SMS_APPID = '6666'
SMS_APPKEY = '66666666666'
SMS_SIGN = '66666666'
创建发送短信函数
views文件修改
from django.shortcuts import render
import random
from django.shortcuts import HttpResponse
from utils.tencent.SMS import send_sms_single
from django.conf import settings
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
# Create your views here.
def send_sms(request):
code = random.randrange(100000, 999999)
res = send_sms_single('1231231231', 1667932, [code, ])
return HttpResponse('成功')
urls添加路由
path('app01/send/sms/', views.send_sms),
访问发送成功