Flask框架使用celery异步发送短信验证码

配置celery

  1. 在.common文件中创建创建文件夹存放celery代码:celery_tasks(文件名自定)
    然后在里面创建main.py文件写celery配置,代码如下:

# 导入celery包
from celery import Celery

# 创建celery对象						5 表示要连接的库
app = Celery("MyWorker", broker="redis://:密码@127.0.0.1:6379/5",
						backend="redis://:密码@127.0.0.1:6379/6")
# 这里redis的连接也可以单独写个文件然后在从配置文件中加载redis配置

# 发现celery任务   这里common.tasks.send_code是任务所在的位置
app.autodiscover_tasks(["common.tasks.send_code"])

创建celery任务

  1. 然后在celery_tasks文件夹中创建send_tasks.py文件(位置文件自己定) 代码如下:

# 导入main.py文件中的app
from common.celery_tasks.main import app
# 导入SmsSDK
from ronglian_sms_sdk import SmsSDK

# SmsSDK里的配置信息 配置信息在自己的容联云的配置信息,要是没有账号可以去注册一个
# [容联云](https://www.yuntongxun.com/)
accId="8a216da8804ba8a5018064a2f6770685"
accToken="6ee0ec3216db4cc0acfdd3764827fbc2"
appId="8a216da8804ba8a5018064a2f7fc068c"

@app.task
def send_code(mobile, code, expiry=5)
	"""
	mobile:手机号
	code:验证码
	expiry:过期时间 这里我们设置默认5分钟
	"""
	# 实例化SmsSDK
	sdk = SmsSDK(accId=accId, accToken=accToken, appId=appId)
	# 组织数据
	tid = "1"
	mobile = "%s" % mobile
	datas = ("%s" % code, "%s" % expiry)
	# 使用sendMessage使用容联云
	resp = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
	# 返回resp
	return resp

发送验证码

  1. 在views文件夹中创建user.py文件(名字自己定)代码如下:

# 写一个蓝图   TODO记得要注册蓝图
# 导入蓝图
from flask import Blueprint, jsonify, g
from flask_restful import Api, Resource, reqparse
import random
import redis
# 导入celery任务
from common.celery_tasks.send_tasks import send_code

# 实例一个蓝图		url_prefix表示url的前缀
user_bp = Blueprint("user_bp", __name__, url_prefix="/v1_0")

api = Api(user_bp)

# 定义类
class SMSCode(Resource):
	def post(self):
		# 通过reqparse获取前端数据
		parser = reqparse.RequestParser()
        parser.add_argument("mobile")
        args = parser.parse_args()
        mobile = args["mobile"]
		# 创建验证码
        code = random.randint(1000, 9999)
		# 调用celery任务执行,传入手机号和验证码
        res = send_code.delay(mobile, code)
        # 判断是否执行成功,成功把验证码存到redi否则返回发送失败
        if res:
        	# 成功把验证码存到redis中
        	# 连接redis  指明要存的库db=
            rdb = redis.Redis(db=4)
            # 通过set存入 第一个是key, 第二个是值,第三个是过期时间600代表600秒
            rdb.set(mobile, code, ex=600)
            # 关闭redis
            rdb.close()
            # 返回发送成功
            return jsonify(message="短信发送成功,请注意查收", code=200)
        else:
            return jsonify(message="短信发送失败", code=400)

# 添加路由
api.add_resource(SMSCode, "/sms_code")

启动celery异步任务

  1. celery -A common.celery_tasks.main worker -l info -P eventlet
    common.celery_tasks.main是celery文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值