python中如何使用Celery容联云异步发送验证码功能

发布时间:2021-09-02 13:49:03 作者:小新
来源:亿速云 阅读:217

这篇文章给大家分享的是有关python中如何使用Celery容联云异步发送验证码功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1.celery异步消息队列介绍

celery应用举例

Celery有以下优点

Celery 特性

2.工作原理 *****

Celery 扮演生产者和消费者的角色

思维导图

python中如何使用Celery容联云异步发送验证码功能

3.异步发短信

首先得安装俩个表要包

pip install celery
pip install celery-with-redis

3.1.settings同级目录下创建 celery 文件

如果 'namespace=‘CELERY''出现报错 celery可以适当降一下级别 ‘4.4.7'

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery


# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'md.settings')

# 注册Celery的APP
app = Celery('meiduo')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现各个app下的tasks.py文件
# app.autodiscover_tasks()

3.2.redis及容联云配置

#获取redis连接
def getRedis():
    from django_redis import get_redis_connection
    conn = get_redis_connection()
    return conn

#发短信  去容联云官网查找自己的信息
from ronglian_sms_sdk import SmsSDK

accId = 'ACCOUNT SID(主账号ID)'
accToken = 'AUTH TOKEN(账户授权令牌)'
appId = 'AppID(默认)'

import json
def send_message(mobile,code,time):
    sdk = SmsSDK(accId, accToken, appId)
    tid = '1'
    datas = (code, time)
    resp = sdk.sendMessage(tid, mobile, datas)
    result = json.loads(resp)
    if result['statusCode'] == '000000':
        return 1
    return 2

3.3.配置settings文件

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/'

CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/'

CELERY_RESULT_SERIALIZER = 'json'

3.4.配置 settings同级目录下 init 文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

3.5.在utils下新建一个task.py文件

# 写异步任务的地方
from celery.task import task
from .comm import send_message

# 定义发送手机号的方法
@task
def mail(mobile,code,time):
    send_message(mobile,code,time)

3.6.接口中调用

如果用了redis数据库,得先开启数据库

from utils.task import send_message
from utils.comm import getRedis
import random

class SendMes(APIView):
    # 短信验证
    def get(self,request):
        # 接收客户端发送的数据
        imagecode = request.query_params.get('imagecode')
        print(imagecode)
        mobile = request.query_params.get('mobile')
        print(mobile)
        uuid = request.query_params.get('uuid')
        print(uuid)
        if not all([imagecode,mobile]):
            return Response({'msg':'没有获取到'})
        # 验证图片验证码
        conn =getRedis()
        # redis 中取验证码
        code = conn.get(uuid)
        print(code)
        if code:
            code = str(code,encoding='utf8')
            # 图片验证码对比
            if imagecode.lower() == code.lower():
                # 验证通过后调用发送短信接口
                sms_code = random.randint(10000,99999)
                # 引用comm文件中的send_message
                result = send_message(mobile,sms_code,1)
               # 加入短信吗发送成功
                if result:
                    # redis中要存短信验证吗
                    conn.setex(mobile,60,sms_code)
                    # 把图片验证码从redis中删除
                    conn.delete(uuid)
                    return Response({'msg':sms_code})
                else:
                    return ({'msg':'发送失败'})
            else:
                return Response({'msg':'验证码不正确'})
        return Response('ok')

3.7.先启动django项目

然后另开终端 cd到项目 目录下启动celery 服务

指定并发数 --autoscale(最多,最少)

celery worker -A 项目的文件名 --loglevel=info --pool=solo --autoscale=50,5
urn Response('ok')
~~~

#### 3.7.先启动django项目 然后另开终端 cd到项目 目录下启动celery 服务

指定并发数 --autoscale(最多,最少)

```pyhon
celery worker -A 项目的文件名 --loglevel=info --pool=solo --autoscale=50,5

感谢各位的阅读!关于“python中如何使用Celery容联云异步发送验证码功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. django使用celery异步发送短信
  2. celery (芹菜) 异步任务

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python celery

上一篇:java如何实现一个接口调取另一个接口

下一篇:SpringCloud Gateway配置自定义路由404的问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》