django项目03--celery的使用

版权声明:内容版权为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"

猜你喜欢

转载自blog.csdn.net/m0_43394876/article/details/88929749