Celery异步发送短信验证码---------Django

本文介绍了如何在Django项目中利用Celery进行异步任务处理,通过Python SDK调用容联云发送验证码。步骤包括安装Celery和eventlet,配置celery.py文件,创建任务函数,并在视图中调用发送短信验证码。
摘要由CSDN通过智能技术生成

这里我们使用容联云平台发送验证码,可以根据官方文档来写.

python SDK文档:Python SDK

安装SDK

pip install ronglian_sms_sdk

 容联云地址:容联云通讯_短信平台、手机验证码、语音验证码、IM即时通讯、云呼叫系统等互联网通信服务

 登录进入如下界面:

绑定一个测试手机号

Celery :基于python的分布式异步任务队列

安装celery  以及  eventlet并发网络库 或者 gevent 协程库

这里我们使用eventlet

pip install celery==4.4.7

pip install eventlet==0.26.1

 celery的工作原理图

一.在Django项目同名目录下创建一个celery.py文件

from celery import Celery   # 导入celery   
from django.conf import settings  
import os

# 配置环境变量  celery 的worder是脱离django启动,但是依赖其配置文件
os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE",
    '项目名.settings'
)
# 实例化celery对象  
# 配置broker: 用于存放任务的
# backend : 存放任务执行结束后的结果
# redis数据库有密码的话   "redis://:密码@127.0.0.1:6379/5"
app = Celery(
        "worker", 
        broker="redis://127.0.0.1:6379/5", 
        backend="redis://127.0.0.1:6379/6"
    )

# 从所有注册的app中 发现任务函数
app.autodiscover_tasks(settings.INSTALLED_APPS)

二.需要使用celery的应用中创建tasks.py文件  创建任务函数

from django_421.celery import app  # 导入编写的celery实例对象
from ronglian_sms_sdk import SmsSDK  # 容联云
from django.conf import settings



# 创建任务函数
@app.task
def send_message(mobile, sms_code, expire=5):
    """
    
    :param mobile: 手机号
    :param sms_code: 验证码
    :param expire: 验证码的有效期
    :return: res
    """

    # 实例化sdk   参数在图一所指位置
    sdk = SmsSDK(
        accId="主账户id",
        accToken="账户授权令牌",
        appId="应用id"
    )

    # 组织数据 字符串类型
    tid = "1"    # 模板id
    mobile = "%s" % mobile  # 格式化手机号
    datas = ("%s" % sms_code, "%s" % expire)  # 短信验证码   有效期

    # 发送短信并接收响应
    res = sdk.sendMessage(tid=tid, mobile=mobile, datas=datas)
    return res

三.编写发送短信验证码的视图

from rest_framework.views import APIView
from rest_framework.response import Response
from users.tasks import send_message   # 导入发送短信的任务函数
import random
import redis


class SmsAPIView(APIView):
    def post(self, request):
        # 1,获取前端数据
        mobile = request.data.get("mobile")

        # 2,使用random.randint生成一个随机短信验证码
        sms_code = "%s" % random.randint(10000, 99999)
        # 2-1存储短信验证码  连接数据库,创建redis对象
        redis_conn = redis.Redis()
        
        # 将验证码存入redis中   有效期300秒
        redis_conn.set(mobile, sms_code, ex=300)
        redis_conn.close()

        # 3,请求容联云  发送短信  异步发送需要使用 delay()   (重要) 
        res = send_message.delay(sms_code=sms_code, mobile=mobile)
        
        # 4,请求发送后 不需要等待验证码发送成功   直接返回响应
        return Response({"msg":"短信已发送,请注意查收","code":200})

最后配置路由即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onlooker10086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值