Flask实战第41天:发送短信验证码

本项目使用的短信运营商是阿里云。使用淘宝账号登录阿里云控制台。在“产品与服务”中搜索“短信”进入短信服务

获取AccessKey

输入子账户用户名

权限选择管理短信服务

 

 

签名管理:申请签名

模板管理:设置模板

 

下载发送短信Python SDK

下载的压缩包为:dysms_python.zip

加压后,进入项目虚拟环境,进入到dysms_python目录,进行安装

在项目工具包utrils新建个python package命名为aliyunsms

把dysms_python目录中的以下文件或目录拷贝到aliyunsms

 

把demo_sms_send.py修改名字为sms_send.py,里面的代码修改后为

import sys
from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClient
import uuid
from aliyunsdkcore.profile import region_provider
import json
from aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT


# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"


#阿里大鱼相关配置
ACCESS_KEY_ID = '填写你自己的'
ACCESS_KEY_SECRET = '填写你自己的'
SING_NAME = "你的短信签名"
TEMPLATE_CODE = "填写你自己的模板CODE"

acs_client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION)
region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)


def send_sms(phone_numbers, template_param=None):
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(TEMPLATE_CODE)

    # 短信模板变量参数
    if template_param is not None:
        smsRequest.set_TemplateParam(template_param)

    # 设置业务请求流水号,必填。
    business_id = uuid.uuid1()
    smsRequest.set_OutId(business_id)

    # 短信签名
    smsRequest.set_SignName(SING_NAME)

    # 数据提交方式
    # smsRequest.set_method(MT.POST)

    # 数据提交格式
    # smsRequest.set_accept_format(FT.JSON)

    # 短信发送的号码列表,必填。
    smsRequest.set_PhoneNumbers(phone_numbers)

    # 调用短信发送接口,返回json
    smsResponse = acs_client.do_action_with_exception(smsRequest)

    # TODO 业务处理

    return smsResponse


if __name__ == '__main__':

    # print(__business_id)
    params = {
        'code': 1234
    }
    # params = u'{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}'
    print(send_sms("13xxxxxxxxx", json.dumps(params)))

 

把发送短信也放到common里面去,编辑common.views.py中写个视图

...
from utils.aliyunsms.send_sms import send_sms
import json

@bp.route('/sms_captcha/')
def sms_captcha():
    params = {'code':'abcd'} #abcd就是发发送的验证码,code就是模板中定义的变量
    result = send_sms('你接收短信的手机号码', json.dumps(params))
    if result:
        return '发送成功'
    else:
        return '发送失败'

访问浏览器:http://127.0.0.1:/sms_captcha/

你的手机应该成功收到短信了,和之前定义的模板一样

 

posted @ 2018-08-18 21:34  sellsa  阅读(2701)  评论(0编辑  收藏  举报