簡訊驗證碼後端 介面設計

2021-10-24 23:01:17 字數 2688 閱讀 5153

介面檢視**實現:傳送簡訊驗證碼可以使用容聯雲通訊實現

# 生成簡訊驗證碼

class

smscodeview

(view)

:def

get(self, request, mobile)

:# 注意:image_code_id就是uuid

image_code = request.get.get(

'image_code'

) uuid = request.get.get(

'image_code_id')if

notall

([image_code, uuid]):

return jsonresponse(

)# 讀取redis中的驗證碼

conn = get_redis_connection(

'verify_code'

) image_code_from_redis = conn.get(

'img_%s'

% uuid)

ifnot image_code_from_redis:

return jsonresponse(

)if image_code.lower(

)!= image_code_from_redis.decode(

).lower():

return jsonresponse(

)# 為了防止圖形驗證碼被頻繁驗證,原則上乙個圖形驗證碼只能使用一次

# 解決方案:從redis中讀取,就直接銷毀

conn.delete(

'img_%s'

% uuid)

# 2.1 生成乙個隨機的簡訊驗證碼(6位數)

sms_code =

"%06d"

% random.randint(0,

999999

)print

('手機簡訊驗證碼:'

, sms_code)

flag = conn.get(

'sms_flag_%s'

% mobile)

if flag:

return jsonresponse(

) p = conn.pipeline(

)# 獲取乙個管道物件

try:

p.setex(

'sms_%s'

% mobile,

300, sms_code)

# 新增標誌位

p.setex(

'sms_flag_%s'

% mobile,60,

'-1'

) p.execute(

)# 通過管道批量執行redis命令

except exception as e:

return jsonresponse(

)# todo:

# 2.3 呼叫雲通訊傳送簡訊

# 2.3 發布"傳送簡訊"任務,交給非同步程式去執行,此處不會阻塞

return jsonresponse(

)

優化1:避免一分鐘內重**送簡訊

優化2:pipeline 操作 redis 資料庫

-問題引入:

如果redis服務端需要同時處理多個請求,加上網路延遲,那麼服務端利用率不高,效率降低。

- 解決的辦法:

管道 pipeline

往常的不加管道的實現過程:

實現原理:

實現的原理是佇列。

client 可以將三個命令放到乙個 tcp 報文一起傳送。

server 則可以將三條命令的處理結果放到乙個 tcp 報文返回。

佇列是先進先出,這樣就保證資料的順序性。

實現:

# 建立 redis 管道

pl = redis_conn.pipeline(

)# 將 redis 請求新增到佇列

pl.setex(

'sms_%s'

% mobile,

300, sms_code)

pl.setex(

'send_flag_%s'

% mobile,60,

1)# 執行請求, 這一步千萬別忘了

pl.execute(

)

簡訊驗證碼

簡訊驗證碼 圍繞以下兩個方法開展 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...

發簡訊介面獲取驗證碼

介面合作公司 從這裡獲取id 簡訊介面使用者名稱 uid uid tclkj02234 簡訊介面密碼 passwd passwd 731765 傳送到的目標手機號碼 telphone telphone 1863525 簡訊內容 message message 這是一條測試資訊111111 xx fi...