1. 程式人生 > >celery非同步任務傳送簡訊驗證碼

celery非同步任務傳送簡訊驗證碼

1.在專案中建立celery_tasks包

2.在celery_tasks目錄下建立config.py檔案,用於儲存celery的配置資訊

broker_url = "redis://127.0.0.1/14"

3.在celery_tasks目錄下建立main.py檔案,用於作為celery的啟動檔案

from celery import Celery

# 為celery使用django配置檔案進行設定
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
    os.environ['DJANGO_SETTINGS_MODULE'] = '專案的配置路徑'
# 建立celery應用 app = Celery('隨便起個名稱') # 匯入celery配置 app.config_from_object('celery_tasks.config') # 自動註冊celery任務 app.autodiscover_tasks(['celery_tasks.sms'])

4.在celery_tasks目錄下建立sms包,用於放置傳送簡訊的非同步任務相關程式碼

5.在celery_tasks/sms/目錄下建立tasks.py檔案(檔名必須是tasks),用於儲存傳送簡訊的非同步任務

from meiduo_mall.libs.yuntongxun.sms import
CCP from celery_tasks.main import app import logging logger = logging.getLogger("django") @app.task(name="send_sms_code") def send_sms_code(mobile, sms_code): """ 傳送簡訊驗證碼 :param mobile: 手機號碼 :param sms_code: 簡訊驗證碼 :return: None """ try: ccp = CCP() result = ccp.send_template_sms(mobile,
[sms_code, '5'], 1) except Exception as e: logger.error("傳送簡訊驗證碼[異常][mobile: %s, message: %s ]" % (mobile, e)) else: if result == 0: logger.info("傳送簡訊驗證碼[成功][mobile: %s ]" % mobile) else: logger.warning("傳送驗證碼簡訊[失敗][ mobile: %s ]" % mobile)

6.apps/users/views.py中改寫SMSCodeView檢視,使用celery非同步任務傳送簡訊

class SMSCodeView(APIView):

	def get(self, request, mobile):

		...
		# 傳送簡訊
		send_sms_code.delay(mobile, sms_code)

		# 返回結果
		return Response({"message": "ok"})

7.進入虛擬環境,切換到celery_tasks資料夾路徑下,開啟非同步

celery -A celery_tasks.main worker -l info

引數解釋:

  • -A celery_tasks.main 指定啟動檔案
  • worker 建立任務執行者
  • -l info 檢視詳細執行過程