第一次註冊使用白送你200條,美滋滋python
點點點操做就完事了,要想發送短信,必需要申請簽名和模板。簽名類型能夠使用網站,公衆號,小程序,appredis
填好信息,上傳指定的截圖憑據便可。網站建立簽名須要上傳域名備案裏面的備案號等信息django
接下來須要建立短信內容模板,按照提示寫就行。模板裏面能夠挖坑,接下來能夠在坑裏面填驗證碼,過時時間一類的小程序
還須要在應用管理中建立應用。系統會默認建立一個應用,也能夠本身新建立。應用裏的SDK AppID和 AppKey接下來程序裏面會做爲配置參數api
https://cloud.tencent.com/document/product/382/11672緩存
上面是騰訊雲sdk2.0的官方文檔,3.0功能態度,2.0就足夠好用了app
首先安裝騰訊雲sdk2.0的模塊,使用虛擬環境的話注意檢查一下有沒有裝上dom
pip install qcloudsms_py
準備必要參數函數
# 短信應用 SDK AppID appid = 1400009099 # SDK AppID 以1400開頭 # 短信應用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 須要發送短信的手機號碼,看需求來,做爲參數傳入下面的函數 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,須要在短信控制檯中申請 template_id = 7839 # NOTE: 這裏的模板 ID`7839`只是示例,真實的模板 ID 須要在短信控制檯中申請 # 簽名 sms_sign = "騰訊雲" # NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這裏的簽名"騰訊雲"只是示例,真實的簽名須要在短信控制檯中申請
單發短信網站
from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError ssender = SmsSingleSender(appid, appkey) params = ["5678","2"] # 用來填進短信模板的坑,好比5678是驗證碼,2是失效時間 try: # phone_numbers是須要發送短信的手機號,按實際狀況傳參便可 result = ssender.send_with_param(86, phone_numbers[0], template_id, params, sign=sms_sign, extend="", ext="") except HTTPError as e: print(e) except Exception as e: print(e) print(result)
注意單發和羣發的方法不同,具體能夠查看官方文檔
咱們能夠把像sdk發送短信這樣的第三方功能放進libs裏,把配置參數拉出來寫在libs的settings裏,便於管理和擴展
settings.py
導入到發送短信的功能文件,裏面寫配置參數
# settings.py # 短信應用 SDK AppID appid = 1400009099 # SDK AppID 以1400開頭 # 短信應用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 須要發送短信的手機號碼,看需求來,做爲參數傳入下面的函數 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,須要在短信控制檯中申請 template_id = 7839 # NOTE: 這裏的模板 ID`7839`只是示例,真實的模板 ID 須要在短信控制檯中申請 # 簽名 sms_sign = "騰訊雲" # NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這裏的簽名"騰訊雲"只是示例,真實的簽名須要在短信控制檯中申請
send_sms.py
# send_sms.py 放功能代碼 from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError # 導入騰訊雲的模塊 from luffyapi.utils.logging import log # 導入日誌模塊,短信發送失敗的時候紀錄 from . import settings # 同級目錄導入配置參數 # 生成隨機4位驗證碼,在視圖中調用 def rand_code(): import random rd_code = '' for i in range(4): rd_code += str(random.randint(0,9)) return rd_code # 單發短信功能 def send_sms(phone,code): ssender = SmsSingleSender(settings.appid, settings.appkey) params = [code,"3"] # 當模板沒有參數時,`params = []` try: result = ssender.send_with_param(86, phone, settings.template_id, params, sign=settings.sms_sign, extend="", ext="") if result.get('result') == 0: return True else: return False except Exception as e: print(e) log.error(f'{phone}:短信發送失敗,錯誤爲{str(e)}')
視圖函數中
class LoginView(ViewSet): # 發送短信驗證碼 @action(methods=['GET'], detail=False) def send(self,request,*args,**kwargs): phone = request.query_params.get('phone') if not re.match('^1[3-9][0-9]{9}$',phone): return APIResponse(code=0,msg='手機號格式錯誤') code = send_sms.rand_code() result = send_sms.send_sms(phone,code) # 發送驗證碼 # 驗證碼存進緩存,以後換成redis,緩存的key放在settings的const裏 cache.set(settings.PHONE_CACHE_KEY%phone,code,180) if result: return APIResponse(code=1,msg='發送成功') else: return APIResponse(code=0,msg='發送失敗')