celery傳送簡訊介面

2021-10-24 12:52:11 字數 2572 閱讀 3062

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

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

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

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. 檢查引數

if not 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(

)),]

celery傳送簡訊介面

celery專案中的所有導包位址,都是以celery base dir為基準設定.執行celery命令時,也需要進入celery base dir目錄執行.celery base dir os.path.dirname os.path.abspath file true def send sms c...

celery傳送簡訊介面

2.測試介面 celery專案中的所有導包位址,都是以celery base dir為基準設定.執行celery命令時,也需要進入celery base dir目錄執行.celery base dir os.path.dirname os.path.abspath file true def sen...

celery非同步傳送簡訊

celery專案中的所有導包位址,都是以celery base dir為基準設定 執行celery命令時,也需要進入celery base dir目錄執行 celery base dir os.path.dirname os.path.abspath file def send sms code s...