Django使用celery异步发送短信验证码代码示例

目录
  • celery
    • 1.celery介绍
      • 1.1 celery应用举例
      • 1.2 Celery有以下优点
      • 1.3 Celery 特性
    • 2.工作原理
      • 2.1 Celery 扮演生产者和消费者的角色
    • 3.异步发短信
      • 1.settings同级目录下创建 celery 文件
      • 2.配置settings文件
      • 3 配置 settings同级目录下 init 文件
      • 4.在utils下新建一个task.py文件
      • 5.接口中调用
      • 6 .先启动django项目 然后另开终端 cd到项目

celery

1.celery介绍

1.1 celery应用举例

  • Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery
  • 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情
  • Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis

1.2 Celery有以下优点

简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的

高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务快速:一个单进程的celery每分钟可处理上百万个任务

灵活: 几乎celery的各个组件都可以被扩展及自定制

1.3 Celery 特性

方便查看定时任务的执行情况, 如 是否成功, 当前状态, 执行任务花费的时间等.

可选 多进程, Eventlet 和 Gevent 三种模型并发执行.

Celery 是语言无关的.它提供了python 等常见语言的接口支持.

2.工作原理

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

 Celery Beat : 任务调度器. Beat 进程会读取配置文件的内容, 周期性的将配置中到期需要执行的任务发送给任务队列.

Celery Worker : 执行任务的消费者, 通常会在多台服务器运行多个消费者, 提高运行效率.

Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方(通常是消息队列或者数据库).

Producer : 任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者.

Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.

3.异步发短信

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

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo.settings')
# 注册Celery的APP
app = Celery('meiduo')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()

2.配置settings文件

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/'
CELERY_RESULT_SERIALIZER = 'json'

3 配置 settings同级目录下 init 文件

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']

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

from celery.task import task
from .comm import send_message

# 定义发送邮件的方法
@task
def mail(mobile,code):
    send_message(mobile,code,5)

5.接口中调用

from utils.tasks import mail
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 =get_redis_conn()
        # 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)
                # 重点 重点 重点!!!!!!!
                result = mail.delay(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')

6 .先启动django项目 然后另开终端 cd到项目

目录下启动celery 服务 指定并发数 --autoscale(最多,最少)

celery worker -A meiduo --loglevel=info --pool=solo --autoscale=50,5

以上就是Django使用celery异步发送短信验证码代码示例的详细内容,更多关于Django使用celery异步发送短信验证码的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Django中异步任务之django-celery

    Celery文档参考:http://docs.jinkan.org/docs/celery/ 参考文章:https://www.jb51.net/article/158046.htm Django中异步任务---django-celery Celery简单介绍: celery使用场景: 耗时任务定时任务 请求结果不怎么重要的 耗时任务比如:发送短信验证码我们可以先发送给客户任务状态(请求成功或失败) 请求结果重要的建议使用django实现 比如:支付 首先简单介绍一下,Celery 是一个强大的

  • python使用celery实现异步任务执行的例子

    使用celery在django项目中实现异步发送短信 在项目的目录下创建celery_tasks用于保存celery异步任务. 在celery_tasks目录下创建config.py文件,用于保存celery的配置信息 ```broker_url = "redis://127.0.0.1/14"``` 在celery_tasks目录下创建main.py文件,用于作为celery的启动文件 from celery import Celery # 为celery使用django配置文件进行

  • Django集成celery发送异步邮件实例

    安装依赖 pip install django-celery-beat pip install django-celery-email pip install celery pip install msgpack-python pip install msgpack 在settings文件中配置 添加app应用到installed_apps中 "djcelery_email", "django_celery_beat" 修改.env文件配置: #邮箱后端,使用cel

  • Django中使用celery完成异步任务的示例代码

    本文主要介绍如何在django中用celery完成异步任务,web项目中为了提高用户体验可以对一些耗时操作放到异步队列中去执行,例如激活邮件,后台计算操作等等 当前项目环境为: django==1.11.8 celery==3.1.25 redis==2.10.6 pip==9.0.1 python3==3.5.2 django-celery==3.1.17 一,创建Django项目及celery配置 1,创建Django项目 1>打开终端输入:django-admin startproject

  • Django使用celery异步发送短信验证码代码示例

    目录 celery 1.celery介绍 1.1 celery应用举例 1.2 Celery有以下优点 1.3 Celery 特性 2.工作原理 2.1 Celery 扮演生产者和消费者的角色 3.异步发短信 1.settings同级目录下创建 celery 文件 2.配置settings文件 3 配置 settings同级目录下 init 文件 4.在utils下新建一个task.py文件 5.接口中调用 6 .先启动django项目 然后另开终端 cd到项目 celery 1.celery介

  • Django中如何使用celery异步发送短信验证码详解

    目录 1.celery介绍 1.1 celery应用举例 1.2 Celery有以下优点 1.3 Celery 特性 2.工作原理 2.1 Celery 扮演生产者和消费者的角色 3.异步发短信 总结 1.celery介绍 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用celery 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着

  • jQuery实现倒计时重新发送短信验证码功能示例

    本文实例讲述了jQuery实现倒计时重新发送短信验证码功能的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"> var countdown

  • java发送短信系列之同步、异步发送短信

    本篇本章是发送短信的第一部分, 说一下同步/异步发送短信的代码, 以后几篇我们稍微完善一下功能, 添加发送频率的限制和日发送次数的限制. 发送短信的方法可能不少, 我们的方法是使用服务商提供的服务. 一般来说, 这些服务都是和语言无关的, 这里我们使用java写示例程序. 1.发送短信的接口 根据自己的情况选择服务商. 2.开发文档 从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用htt

  • django项目中使用云片网发送短信验证码的实现

    1. 在apps包下新建一个utils的python包 2. utils包中新建一个YunPian.py文件,文件中代码如下 import requests import json def send_single_sms(apikey, code, mobile): # 发送单条短信 url = "https://sms.yunpian.com/v2/sms/single_send.json" text = "[后端学习]您的验证码是{}.如非本人操作,请忽略本短信"

  • JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

  • javascript发送短信验证码实现代码

    本文首先分析手机发送验证码的原理,再对javascript发送短信验证码予以实现,具体思路如下: 实现点击"发送验证码"按钮后,按钮依次显示为"59秒后重试"."58秒后重试"-直至倒计时至0秒时再恢复显示为"发送验证码".在倒计时期间按钮为禁用状态 . 第一步.获取按钮.绑定事件.设置定时器变量和计时变量 第二步.添加定时器,每隔1秒钟计时减 1,直至当计时小于等于 0 时清除定时器,按钮恢复为"发送验证码&quo

  • 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)

    相关阅读: 基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭) 下面一段代码是小编给大家带来的js发送短信验证码后实现倒计时功能,代码简单易懂. 具体代码如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus

  • 通过第三方接口发送短信验证码/短信通知(推荐)

    需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字.大小写字母和特殊符号生成的密码.短信发送服务由云通信http://www.yuntongxun.com/提供. 随机密码生成方法: /** * 生成随即密码 * @author chao.gao * @param pwd_len 生成的密码的总长度 * @return 密码的字符串 */ public static String genRandomNum(int pwd_len) { // Stri

  • Android实现发送短信验证码倒计时功能示例

    一.简介: 开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的. 效果图: 二.实现步骤: 1.一个关键类:CountDownTimer(Android系统自带的倒计时功能类) public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; //显示倒计时的文字 /** * @param textView Th

随机推荐