前言

在当今这个网络如此发达的时代,手机已经成为了必不可少的随身物品,而,普通的单因子登录已经不是百分百安全的了,很容易被暴力破解,所以,双因子、三因子这些认证方式,已经从“你有什么”,变成了“你是谁”,从而让账户变得更加的安全,所以,短信验证码已经成为了必不可少的东西,今天,带来阿里云+python来发送短信。

1.注册阿里云

注册步骤很简单,地址:在这里,需要注意的是,发送短信只有实名认证的用户才能够使用,参考这里

2.创建AccessKey和Access Key Secret

3.获取签名名称和模板code

4.安装依赖

1.安装pythonsdk

# 安装阿里云的相关依赖
# python2执行此命令
pip install aliyun-python-sdk-core
# python3执行此命令
pip install aliyun-python-sdk-core-v3

2.安装SDK

下载地址在这里,解压之后,进入根目录执行命令: python setup.py install #如果为python3,请执行:python3 setup.py install

3.安装api依赖

pip install aliyun-python-sdk-kms

pip install aliyun-python-sdk-dysmsapi

5.写一个工具函数

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

# 用户AccessKey
ACCESS_KEY_ID = ""
# Access Key Secret
ACCESS_KEY_SECRET = ""


class SMS:
    def __init__(self,signName,templateCode):
        self.signName = signName
        self.templateCode = templateCode
        self.client = client = AcsClient(ACCESS_KEY_ID,ACCESS_KEY_SECRET,'cn-hangzhou')

    def send(self, phone_numbers, template_param):
        request = CommonRequest()
        request.set_accept_format('json')
        request.set_domain('dysmsapi.aliyuncs.com')
        request.set_method('POST')
        request.set_protocol_type('https')  # https | http
        request.set_version('2017-05-25')
        request.set_action_name('SendSms')

        request.add_query_param('RegionId', "cn-hangzhou")
        request.add_query_param('PhoneNumbers', phone_numbers)
        request.add_query_param('SignName', self.signName)
        request.add_query_param('TemplateCode', self.templateCode)
        request.add_query_param('TemplateParam', template_param)
        response = self.client.do_action_with_exception(request)
        return response

6.调用此函数

from random import randint

class Aliyun_Sms(APIView):
    def get(self,request):
        # 生成验证码
        params = "{'code':%d}"%(randint(1000,100000))
        para = request.GET.get('phone_numbers')
        sms = SMS("模板名称","	模版CODE")
		res = sms.send(phone,params)
        return HttpResponse(res)