要使用阿里云短信服务SDK的V2.0版本在Django项目中发送短信,您首先需要安装相应的SDK,然后在Django中配置和使用它。
安装SDK
使用pip安装SDK:
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-dysmsapi
配置
在Django项目的settings.py
文件中添加阿里云短信服务的配置:
# 阿里云短信服务配置
ALIYUN_SMS_ACCESS_KEY_ID = 'AccessKeyId'
ALIYUN_SMS_ACCESS_KEY_SECRET = 'AccessKeySecret'
ALIYUN_SMS_REGION_ID = 'cn-hangzhou' # 地域ID
ALIYUN_SMS_SIGN_NAME = '签名名称'
ALIYUN_SMS_TEMPLATE_CODE = '短信模板Code'
创建服务类
在Django应用的utils
目录下创建一个aliyun_sms.py
文件,并添加以下内
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from LightCampus.settings import ALIYUN_SMS_ACCESS_KEY_ID, ALIYUN_SMS_ACCESS_KEY_SECRET, ALIYUN_SMS_REGION_ID
class AliyunSmsService:
def __init__(self):
self.client = AcsClient(ALIYUN_SMS_ACCESS_KEY_ID, ALIYUN_SMS_ACCESS_KEY_SECRET, ALIYUN_SMS_REGION_ID)
def send_sms(self, phone_numbers, sign_name, template_code, template_param=None):
request = CommonRequest()
request.set_domain('dysmsapi.aliyuncs.com')
request.set_version('2017-05-25')
request.set_action_name('SendSms')
request.add_query_param('PhoneNumbers', phone_numbers)
request.add_query_param('SignName', sign_name)
request.add_query_param('TemplateCode', template_code)
if template_param:
request.add_query_param('TemplateParam', template_param)
response = self.client.do_action_with_exception(request)
return response
在视图中使用
使用AliyunSmsService
来发送短信:
import json
import random
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from LightCampus.settings import ALIYUN_SMS_SIGN_NAME, ALIYUN_SMS_TEMPLATE_CODE
from LightCampus.utils.aliyun_sms import AliyunSmsService
@csrf_exempt
def send_message(request):
data = json.loads(request.body)
# 实例化服务类
sms_service = AliyunSmsService()
# 需要发送短信的手机号
phone_numbers = data['phone_numbers']
sign_name = ALIYUN_SMS_SIGN_NAME
template_code = ALIYUN_SMS_TEMPLATE_CODE
# 生成6位随机数
random_number = random.randint(100000, 999999)
# 验证码
template_param = json.dumps({"code": random_number})
# 验证码存储在session中
request.session['sms_message'] = random_number
response = json.loads(sms_service.send_sms(phone_numbers, sign_name, template_code, template_param))
code = response['Code']
msg = response['Message']
return JsonResponse({
'code': code,
'msg': msg,
})