版权声明:内容版权为CSDN用户:kayseen 所有,若您需要引用、转载,需要注明来源及原文链接 https://blog.csdn.net/m0_43394876/article/details/88929749
4. celery异步发送短信验证码
1.什么是celery:
https://blog.csdn.net/m0_43394876/article/details/87727858
celery包含客户端(比如django) , 任务队列broker(存放任务的地方,rabbitmq或者redis,能够解耦合) , 任务处理者worker(真正执行任务的一方)
2.celery的目录搭建:
3.发送短信的视图函数调用
celery的调用方法为函数名.delay()
,在task.py中定义真正发送短信的任务部分并且定义参数; 在视图函数中调用该任务并且携带参数传过去。
expires = constants.SMS_CODE_REDIS_EXPIRES // 60
#send_sms_code是在celery中定义的方法
send_sms_code.delay(mobile,sms_code,expires,constants.SMS_CODE_TEMP_ID)
return Response({'message':'OK'})
4.在sms包的tasks.py文件中定义send_sms_code方法, 导入云通讯的ccp
让一个函数使用celery,就是在该函数上面添加在入口文件中定义的装饰器
# celery_app 装饰器在入口文件main.py中定义
@celery_app.task(name='send_sms_code')
def send_sms_code(mobile,sms_code,expires,temp_id):
# 发送短信
try:
ccp = CCP()
result = ccp.send_template_sms(mobile, [sms_code, expires], temp_id)
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)
5.入口文件main.py中定义celery应用
from celery import Celery
# 为celery使用django配置文件进行设置
# 因为celery需要单独启动,所以要声明django的配置文件在哪里
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev'
# 创建celery应用,上面的装饰器即为此
celery_app = Celery('meiduo')
# 导入celery配置的方法,导入配置的方法同flask中导入配置的方法, config.py在下面单独新建
celery_app.config_from_object('celery_tasks.config')
# 自动注册celery任务,约定俗成的会自动到目录下寻找sms包下的名为tasks.py的文件,所以只用具体到包就可以
celery_app.autodiscover_tasks(['celery_tasks.sms'])
6.新建config.py文件
# celery任务存储的位置,
broker_url = "redis://127.0.0.1/14"