首先使用容联云需要的一下key id什么的 在我的另一篇文章
https://blog.csdn.net/kun_ers/article/details/124481090?spm=1001.2014.3001.5502
我们先来配置Celery, 可以在项目根目
录下创建一个celery文件夹
并创建文件main.py用来配置celery
# celery/main.py
# 导包celery
from celery import Celery
# 创建celery对象
app = Celery(
'worker',
borker="redis://127.0.0.1:6379/5", # 存放任务的redis地址
backend="redis://127.0.0.1:6379/5", # 存放任务处理结果的地址
)
# 我的redis是没有密码的 如果有密码 可以这样写 redis://:password@127.0.0.1:6379/5
# 再然后就是要去发现任务函数了
app.autodiscover_tasks(['common.tasks.send_code'])
# 这里写你要执行的任务函数所在的文件路径 可以是多个文件,存放在列表里
下面来看任务函数 这个跟django中的使用是一样的
from ronglian_sms_sdk import SmsSDK
from common.celery_tasks.main import app
import redis, json
# 通过@app.task装饰为任务函数
@app.task
def sms_code(mobile, code, expire=5):
# 容联云里的
sdk = SmsSDK(
accId="",
accToken="",
appId=""
)
tid = "1"
mobile = "%s" % mobile
datas = ("%s" % code, "%s" % expire)
res = sdk.sendMessage(tid, mobile, datas)
# 连接redis
redis_cli = redis.Redis(host="127.0.0.1", port=6379, db=3)
# 这里我加了一个判断发送短信的状态码 当 为000000 时是发送成功
# 平时练习可以不加
if json.loads(res)['statusCode'] == "000000":
# 发送成功 存到redis 设置过期时间
redis_cli.set(mobile, code, ex=300)
# 关闭redis连接
redis_cli.close()
# 返回True
return True
return False
使用这个发送短信验证码时 只需要将该任务函数导过去
在合适的位置调用 ,异步的话需要在热舞函数后面.delay()
例如:
sms_code.delay(mobile, code)
用一个对象接收发送短信的结果 判断是否发送成功就行了