flask專案之5 簡訊驗證碼傳送

2021-10-12 05:15:25 字數 4762 閱讀 3021

概述:

pip install ronglian_sms_sdk
from ronglian_sms_sdk import smssdk

accid =

'容聯雲通訊分配的主賬號id'

acctoken =

'容聯雲通訊分配的主賬號token'

'容聯雲通訊分配的應用id'

defsend_message()

: tid =

'容聯雲通訊建立的模板id'

mobile =

'手機號1,手機號2'

datas =

('變數1'

,'變數2'

) resp = sdk.sendmessage(tid, mobile, datas)

print

(resp)

說明下,其中的datas對應的是簡訊模板裡的1和2

登入驗證模版您的驗證碼為,請於內正確輸入,如非本人操作,請忽略此簡訊。

class

ccp(

object):

"""傳送簡訊的單例類"""

# _instance = none

def__new__

(cls,

*args,

**kwargs):if

nothasattr

(cls,

"_instance"):

cls._instance =

super()

.__new__(cls,

*args,

**kwargs)

return cls._instance

a = ccp(

)print(id

(a))

b = ccp(

)print(id

(b))

通過這樣的方式獲得的例項共用乙個空間

如果採用傳統方式,則每個例項佔乙個空間,例項不再列舉

簡訊驗證碼傳送:

在libs中新建包:ronglianyun,新建ccp_sms.py檔案,在其中新建傳送模板的單例類

from ronglian_sms_sdk import smssdk

import json

accid =

'8a216d************xx'

acctoken =

'***************x'

'***************************'

class

ccp(

object):

"""傳送簡訊的單例類"""

# _instance = none

def__new__

(cls,

*args,

**kwargs):if

nothasattr

(cls,

"_instance"):

cls._instance =

super()

.__new__(cls,

*args,

**kwargs)

return cls._instance

defsend_message

(self, mobile, datas, tid)

: sdk = self._instance.sdk

resp = sdk.sendmessage(tid, mobile, datas)

result = json.loads(resp)

if result[

'statuscode']==

'000000'

:return

0else

:return

-1

然後在藍圖verify_code.py新建路由:

@api.route(

"/sms_codes/"

)def

get_sms_code

(mobile)

:"""獲取簡訊驗證碼"""

# 獲取引數

# 驗證碼

image_code = request.args.get(

'image_code'

)# uuid

image_code_id = request.args.get(

'image_code_id'

)# 校驗引數

ifnot

all(

[image_code, image_code_id]):

return jsonify(errno=ret.paramerr, errmsg=

'引數不完整'

)# 業務邏輯

# 從redis中取出驗證碼

try:

real_image_code = redis_store.get(

'image_code_%s'

% image_code_id)

except exception as e:

logging.error(e)

return jsonify(errno=ret.dberr, errmsg=

'redis資料庫異常'

)# 判斷驗證碼是否過期

if real_image_code is

none

:return jsonify(errno=ret.nodata, errmsg=

'驗證碼失效'

)# 刪除redis中的驗證碼

try:

redis_store.delete(

'image_code_%s'

% image_code_id)

except exception as e:

logging.error(e)

# print(real_image_code) b'rvmj'

# 與使用者填寫的驗證碼對比

real_image_code = real_image_code.decode(

)if real_image_code.lower(

)!= image_code.lower():

return jsonify(errno=ret.dataerr, errmsg=

'驗證碼錯誤'

)# 判斷手機號的操作

try:

send_flag = redis_store.get(

'send_sms_code_%s'

% mobile)

except exception as e:

logging.error(e)

else

:if send_flag is

notnone

:return jsonify(errno=ret.reqerr, errmsg=

'請求過於頻繁'

)# 判斷手機號是否存在

try:

user = user.query.filter_by(mobile=mobile)

.first(

)except exception as e:

logging.error(e)

else

:if user is

notnone

:# 表示手機號已經被註冊過

return jsonify(errno=ret.dataexist, errmsg=

'手機號已經存在'

)# 生成簡訊驗證碼

sms_code =

"%06d"

% random.randint(0,

999999

)# 儲存真實的簡訊驗證碼到redis

try:

# redis管道

pl = redis_store.pipeline(

) pl.setex(

"sms_code_%s"

% mobile, constants.sms_code_redis_expires, sms_code)

# 儲存傳送給這個手機號的記錄

pl.setex(

'send_sms_code_%s'

% mobile, constants.sned_sms_code_expires,1)

pl.execute(

)except exception as e:

logging.error(e)

return jsonify(errno=ret.dberr, errmsg=

'儲存簡訊驗證碼異常'

)# 發簡訊

try:

ccp = ccp(

) result = ccp.send_message(mobile,

(sms_code,

int(constants.sms_code_redis_expires/60)

),1)

except exception as e:

logging.error(e)

return jsonify(errno=ret.thirderr, errmsg=

'傳送異常'

)# 返回值

if result ==0:

return jsonify(errno=ret.ok, errmsg=

'傳送成功'

)else

:return jsonify(errno=ret.thirderr, errmsg=

'傳送失敗'

)

Flask 簡訊驗證碼 阿里雲服務

目錄 建立client例項 建立api請求並設定引數 發起請求並處理應答或異常 pip install aliyun python sdk core from aliyunsdkcore.client import acsclient from aliyunsdkcore.request impor...

簡訊驗證碼

簡訊驗證碼 圍繞以下兩個方法開展 1 sendcaptcha 獲取驗證碼 2 commitcaptcha 提交驗證碼 方法 1 addtextchangedlistener 文字變化 2 requestfocus 請求焦點 3 string phone etphonenum.gettext tost...

簡訊驗證碼

你的key access key secret 你自己的key 注意 不要更改 region cn hangzhou product name dysmsapi domain dysmsapi.aliyuncs.com acs client acsclient access key id,acces...