celery非同步任務傳送簡訊驗證碼
阿新 • • 發佈:2018-12-10
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 檢視詳細執行過程