Celery完成发送短信
1-在meiduo/meiduo_mall下创建celery_tasks用于保存celery异步任务。
2-在celery_tasks目录下创建config.py文件,用于保存celery的配置信息
# celery服务器的配置
# 指定谁加入cerery的任务队列
# 注意不是borker 14是默认端口
broker_url = "redis://127.0.0.1/14"
3-在celery_tasks目录下创建main.py文件,用于作为celery的启动文件
# celery服务器的入口
from celery import Celery
# 为celery使用django配置文件进行设置
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_all.settings.dev'
# 创建celery的一个客户端实例, 并起别名
celery_app = Celery('meiduo')
# 加载celery的配置
celery_app.config_from_object('celery_tasks.config')
# 自动注册异步的任务 -- celery会自动的寻找封装异步任务的包里面的tasks.py文件
# 不可以这样指定异步任务:celery_tasks.sms.tasks
# 就是告知celery_app去哪里找异步任务
celery_app.autodiscover_tasks(['celery_tasks.sms',"以后可以加新的应用,比如邮件"])
4-将提供的发送短信的云通讯SDK放到celery_tasks/sms/目录下。
def send_sms_code(mobile, sms_code):
CCP().send_template_sms(mobile,[sms_code,contents.SMS_CODE_REDIS_EXPIRES//60],contents.SEND_SMS_TEMPLATE_ID)
6-后端视图的代码修改--利用回掉函数--delay方法
# 发送短信验证码--交给异步celery去做
# / 5.0----// 5
# sms_code_expires = str(contents.SMS_CODE_REDIS_EXPIRES // 60)
# CCP().send_template_sms(mobile, [sms_code, sms_code_expires], contents.SEND_SMS_TEMPLATE_ID)
# 利用回掉函数的思想,将异步的任务发布到broker任务列表中
# 使用delay函数就可以
# sms_code_expires = str(contents.SMS_CODE_REDIS_EXPIRES // 60)
# temp_id = contents.SEND_SMS_TEMPLATE_ID
# datas = [sms_code, sms_code_expires]
send_sms_code.delay(mobile, sms_code)