栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用容联云Celery异步发送短信验证码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用容联云Celery异步发送短信验证码

文章目录
  • Celery/容联云 安装与命令
    • 安装
    • celery启动命令
  • 一、Celery
    • 1.配置Celery
    • 2.创建任务文件
  • 二、容联云
    • 1. 配置容联云 settings.py
    • 2. 使用SmsSDK发送短信
  • 三、视图编写
    • 1.发送短信验证码
    • 2.验证短信验证码(根据前端要求)
    • 3.先启动django项目 然后另开终端启动celery 服务


Celery/容联云 安装与命令

celery,分布式异步任务队列
eventlet,并发网络库 gevent 协程库
ronglian_sms_sdk 容联云封装的方法

安装

pip install celery==4.4.7

pip install eventlet==0.26.1

pip install ronglian_sms_sdk

celery启动命令

celery -A 项目名 worker -l info -P eventlet


一、Celery 1.配置Celery

在项目同名文件夹下创建celery.py 文件

# 导入celery   导入 settings配置文件
from celery import Celery
import os
from django.conf import settings

# 配置环境变量 celery的worker进程是脱离django启动, 但是依赖其配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'p6_421.settings')

# 创建celery应用app   Worker工人,执行任务的人 myworker
app = Celery('myworker')

# 配置app
app.conf.broker_url = 'redis://:@127.0.0.1:6379/5'    # 相当于数据结构中的队列, Broker把任务暂时放到队列中,等待Worker来处理。
app.conf.result_backend = 'redis://:@127.0.0.1:6379/6'  # Backend 用于保存任务的执行结果

# 发现任务函数   autodiscover_tasks自动发现任务
app.autodiscover_tasks(settings.INSTALLED_APPS)
2.创建任务文件

App users文件夹下创建tasks.py 文件 Task任务
文件内存放要异步处理的任务

二、容联云 1. 配置容联云 settings.py

accId = ‘容联云通讯分配的主账号ID’
accToken = ‘容联云通讯分配的主账号TOKEN’
appId = ‘容联云通讯分配的应用ID’

settings.py文件配置

ACCID = '8a216da8804ba8a50180x64a39933069b'
ACCTOKEN = '09880a5e3fc94x046b3cc147e240ad169'
APPID = '8a216dax8804ba8a5018064a39a3706a2'
2. 使用SmsSDK发送短信

在App users文件夹下的tasks.py 文件里编写

tasks.py文件

from ronglian_sms_sdk import SmsSDK
from p6_421 import settings
from p6_421.celery import app

# 借助容联运短信验证码
@app.task
def send_message(sms_code, mobile, expire=5):   #  expire=5 5分钟过期
    # 实例化sdk
    sdk = SmsSDK(settings.ACCID, settings.ACCTOKEN, settings.APPID)

    # 组织数据
    tid = '1'                 #容联云的短信模板ID
    mobile = "%s" % mobile
    datas = ("%s" % sms_code, "%s" % expire)  # 第一个:短信验证码  第二个: 多久过期

    # 发送短信 并接收响应
    res = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
    return res
三、视图编写 1.发送短信验证码
# 生成短信验证码   请求容联云 发送短信  异步
class SmsView(APIView):
    def post(self, request):
        mobile = request.data.get('mobile')
        uuid_ = request.data.get('uuid')

        # 2 生成短信验证码 并redis存储 方便验证
        sms_code = '%d' % random.randint(10000, 99999)
        redis_cli = redis.Redis()
        redis_cli.set(uuid_, sms_code, ex=300)

        # 3 请求容联云 发送短信 .delay 异步执行任务
        res = send_message.delay(sms_code, mobile)

        return Response({'code': 200, 'msg': '短信已发送,注意查收!'})
2.验证短信验证码(根据前端要求)
# 验证短信验证码  
class CheckSmsView(APIView):
    def post(self, request):
        sms_code = request.data.get('sms_code')
        uuid_ = request.data.get('code_id')

        # 查询redis 拿出存储的短信验证码stored_sms_code
        redis_cli = redis.Redis()
        stored_sms_code = redis_cli.get(uuid_)

        # 判断  存在&解码后=前端验证码
        if stored_sms_code and stored_sms_code.decode() == sms_code:
            return Response({'code': 200, 'msg': '对比成功'})
        else:
            return Response({'code': 400, 'error': '对比失败'})
3.先启动django项目 然后另开终端启动celery 服务

celery -A 项目名 worker -l info -P eventlet


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号