1.在django项目主应用下创建celery.py文件,配置以下内容:
# celery.py文件
import os
from celery import Celery
from django.conf import settings
# 为celery配置环境变量,识别和加载django的配置文件
# 因为worker是脱离django启动的,且依赖其配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mdpro.settings') # 主应用
# 创建celery实例
app = Celery('mdpro')
# 指定celery消息队列的配置
app.config_from_object('mdpro.config', namespace='CELERY')
#也可以app.conf.update(BROKER_URL="XXX")
# 从所有的django-app中加载任务
app.autodiscover_tasks(settings.INSTALLED_APPS)
2.在django项目主应用mdpro下创建config.py文件,配置以下内容:
# 消息中间人broker设置
broker_url = 'redis://:@127.0.0.1:6379/15' #不能写localhost
# 结果存储设置
result_backend = 'redis://:@127.0.0.1:6379/14'
3.在django项目其他应用下,这里是users,创建tasks.py
from django.conf import settings
from ronglian_sms_sdk import SmsSDK
from rest_framework.utils import json
# 发送短信验证码
def send_message(mobile, sms_code, expire):
# 实例化sdk
sdk = SmsSDK(settings.ACCID, settings.AUTHTOKEN, settings.APPID)
# 组织数据 tid 是容联云的一个短信模板
tid = "1"
# 发送手机号
mobile = "%s" % mobile
# 短信验证码和过期时间
datas = ("%s" % sms_code, "%s" % expire)
# 发送短信并接受响应
res = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
# 解析响应
print("发送短信的响应:", res, type(res))
res_dirt = json.loads(res)
return res_dirt
4.视图中发送异步任务
# 发送短信
class SmsApiview(APIView):
def post(self, request):
# 获取前端数据
mobile = request.data.get("mobile")
uuid = request.data.get('uuid')
# 生成短信验证码 转化成字符串形式
sms_code = "%d" % random.randint(10000, 99999)
# 存储短信验证码
redis_cli = redis.Redis(password='password')
redis_cli.set(uuid, sms_code, ex=300)
# 请求容联云发送短信
res = send_message(mobile, sms_code, expire=5)
print("aaa", res)
return Response({'msg': '信息发送成功,请注意查收', 'code': 200})
5.启动celery
在终端中输入:celery -A p6 worker -l info -P eventlet
6.启动vue项目
npm run serve