天天看點

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的文章