配置celery
- 在.common文件中创建创建文件夹存放celery代码:celery_tasks(文件名自定)
然后在里面创建main.py文件写celery配置,代码如下:
from celery import Celery
app = Celery("MyWorker", broker="redis://:密码@127.0.0.1:6379/5",
backend="redis://:密码@127.0.0.1:6379/6")
app.autodiscover_tasks(["common.tasks.send_code"])
创建celery任务
- 然后在celery_tasks文件夹中创建send_tasks.py文件(位置文件自己定) 代码如下:
from common.celery_tasks.main import app
from ronglian_sms_sdk import SmsSDK
accId="8a216da8804ba8a5018064a2f6770685"
accToken="6ee0ec3216db4cc0acfdd3764827fbc2"
appId="8a216da8804ba8a5018064a2f7fc068c"
@app.task
def send_code(mobile, code, expiry=5)
"""
mobile:手机号
code:验证码
expiry:过期时间 这里我们设置默认5分钟
"""
sdk = SmsSDK(accId=accId, accToken=accToken, appId=appId)
tid = "1"
mobile = "%s" % mobile
datas = ("%s" % code, "%s" % expiry)
resp = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
return resp
发送验证码
- 在views文件夹中创建user.py文件(名字自己定)代码如下:
from flask import Blueprint, jsonify, g
from flask_restful import Api, Resource, reqparse
import random
import redis
from common.celery_tasks.send_tasks import send_code
user_bp = Blueprint("user_bp", __name__, url_prefix="/v1_0")
api = Api(user_bp)
class SMSCode(Resource):
def post(self):
parser = reqparse.RequestParser()
parser.add_argument("mobile")
args = parser.parse_args()
mobile = args["mobile"]
code = random.randint(1000, 9999)
res = send_code.delay(mobile, code)
if res:
rdb = redis.Redis(db=4)
rdb.set(mobile, code, ex=600)
rdb.close()
return jsonify(message="短信发送成功,请注意查收", code=200)
else:
return jsonify(message="短信发送失败", code=400)
api.add_resource(SMSCode, "/sms_code")
启动celery异步任务
- celery -A common.celery_tasks.main worker -l info -P eventlet
common.celery_tasks.main是celery文件