獲取手機驗證碼

2021-10-24 12:54:15 字數 2801 閱讀 1728

```python

# celery專案中的所有導包位址, 都是以celery_base_dir為基準設定.

# 執行celery命令時, 也需要進入celery_base_dir目錄執行.

celery_base_dir = os.path.dirname(os.path.abspath(__file__)

)true

)def

send_sms_code

(self, mobile, datas)

: sys.path.insert(

0, os.path.join(celery_base_dir,

'../syl'))

# 在方法中導包

from libs.rl_sms import send_message

# time.sleep(5)

try:

# 用 res 接收傳送結果, 成功是:0, 失敗是:-1

res = send_message(mobile, datas)

except exception as e:

res =

'-1'

if res ==

'-1'

:# 如果傳送結果是 -1 就重試.

self.retry(countdown=

5, max_retries=

3, exc=exception(

'簡訊傳送失敗'

))

class

smscodeview

(apiview)

:"""使用apiview的限流"""

# 1. 所有人可以訪問

permission_classes =

(allowany,

)def

post

(self, request)

:# 1. 獲取引數

phone = request.data.get(

'phone'

)# 手機號

image_code = request.data.get(

'image_code'

)# 驗證碼

image_code_uuid = request.data.get(

'image_code_uuid'

)# 前端生成的uuid

# 2. 檢查引數

ifnot

all(

[phone, image_code, image_code_uuid]):

return response()if

not re.match(r'^1[3456789]\d$'

, phone)

:return response(

)# 3. 檢查是否傳送

redis_client = get_redis_connection(

'img_code'

) phone_exists = redis_client.get(phone)

if phone_exists:

return response(

)# 驗證圖形驗證碼

redis_image_code = redis_client.get(image_code_uuid)

# bytes

if redis_image_code:

# bytes 轉成 string

redis_image_code = redis_image_code.decode(

)# 比較使用者提供的內容是否和redis中儲存的一致

if image_code.upper(

)!= redis_image_code:

return response(

)# 4. 傳送

code =

'%06d'

% random.randint(0,

999999

)# 隨機6位驗證碼

from syl.settings import base_dir

sys.path.insert(

0, os.path.join(base_dir,

'../celery_task'))

from main import send_sms_code # 必須這麼寫, 從main中導包

send_sms_code.delay(phone,

(code,

"5")

)print

(code)

# 5.使用 pipeline 批量操作

pl = redis_client.pipeline(

)# 例項化pipeline物件

pl.setex(phone,60*

5, code)

# 儲存phone:code, 5分鐘有效期

pl.delete(image_code_uuid)

# 從redis中刪除這個驗證碼, 以防再次被使用

pl.execute(

)# 6. 返回結果

return response(

)

urlpatterns =

[ path(

'sms_codes/'

, views.smscodeview.as_view())

,]

介面url

請求攜帶引數

獲取驗證碼

doctype html en utf 8 viewport content width device width,initial scale 1.0 獲取驗證碼 title script head button id btn value 獲取驗證碼 body setinterval 方法可按照指定...

語音驗證碼api 手機接聽驗證碼

語音驗證碼api,通過手機接聽驗證碼實現驗證功能。介面名稱 語音驗證碼api 介面平台 api介面 支援格式 json xml 請求方式 http get post 請求示例 您申請的 key valicode 12345678 to 18912312312 playtimes 3 請求引數說明 名...

傳送手機驗證碼

import random import string import time import hashlib from urllib import parse,request defsend sms 請求的url api 準備headers中的引數 最大128個字元的隨機字串 nonce join ...