天天看点

django之注册会员发送短信验证码的业务

现在注册会员要么就是邮箱激活,要么就是发送短信验证码

邮箱很简单,在163或者qq邮箱开启smtp服务器,然后使用django内置的smtp模块,配置一些邮箱参数,加入celery异步任务发送邮件就行了,今天这篇文章主要讲一下短信验证码服务

我们采用阿里云短信服务

django之注册会员发送短信验证码的业务

进入到aliyun短信服务页面

django之注册会员发送短信验证码的业务

直接用支付宝账号登录

django之注册会员发送短信验证码的业务

登录后在鼠标悬停在头像这里,里面有个accesskeys的功能,点进去就可以进入如上的界面,生成accesskey

django之注册会员发送短信验证码的业务

然后在创建你自己的签名以及模板,按里面的要求创建就行,然后等待他们审核通过,一般要几个小时的时间

django之注册会员发送短信验证码的业务

在帮助文档中找到python的API文档

django之注册会员发送短信验证码的业务

下载SDK文件

django之注册会员发送短信验证码的业务

下载python版本的,下载好之后解压

django之注册会员发送短信验证码的业务

将这个文件放到你环境的site_packages中

然后执行pip setup.py install安装

django之注册会员发送短信验证码的业务

把这两个文件放入项目中

django之注册会员发送短信验证码的业务

demo_sms_send我改名成了aliyunsms.py

然后优化一下demo的代码

import json

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
from aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT

# try:
#     reload(sys)
#     sys.setdefaultencoding('utf8')
# except NameError:
#     pass
# except Exception as err:
#     raise err

# 注意:不要更改
REGION = "cn-hangzhou"
PRODUCT_NAME = "Dysmsapi"
DOMAIN = "dysmsapi.aliyuncs.com"
ACCESS_KEY_ID = 'LTAI4**********yp5ZVe'
ACCESS_KEY_SECRET = 'zBme1B1************mYYd062'

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


def send_sms(phone_numbers,code):
    business_id = uuid.uuid1()
    sign_name = "Kevin个人网站"
    template_code = 'SMS_174725054'
    template_param = json.dumps({"code":code})
    smsRequest = SendSmsRequest.SendSmsRequest()
    # 申请的短信模板编码,必填
    smsRequest.set_TemplateCode(template_code)

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

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

    # 短信签名
    smsRequest.set_SignName(sign_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
           

我把其他的参数都写死了,只留了电话和验证码两个参数

然后可以放入视图中调用

def mess(request):
    result = send_sms('185******11','3231')
    print(result)
    return HttpResponse('ok')
           

结果:

django之注册会员发送短信验证码的业务

手机收到验证码,记得你们实验的时候充几块钱,不然发送不成功

python短信接口API文档

我这里只是实现了一个简单的demo,参数都在文档中,大家可以点击看看。

我们其实还可以将发送短信的这个函数注册为celery的异步任务,然后delay调用,不会的可以查看我的其他关于celery的文章