django使用celery异步发送短信

1. 安装celery模块

pip install -U celery==4.3.0
2. 创建celery相关目录
xiaolan/  # 项目主目录
├── mycelery/
    ├── config.py     # 配置文件
    ├── __init__.py
    ├── main.py       # 主程序
    └── sms/          # 一个目录可以放置多个任务,该目录下存放当前任务执行时需要的模块或依赖
        └── tasks.py  # 任务的文件,名称必须是这个
3. 创建celery配置文件config.py
# 注意: 我的redis因为没有设置密码所有可以这样用
# 任务队列的链接地址
broker_url = ‘redis://127.0.0.1:6379/15‘
# 结果队列的链接地址
result_backend = ‘redis://127.0.0.1:6379/14‘
4. 在man.py主程序中对django的配置文件进行加载, 把django和celery进行组合
import os
import django
from celery import Celery

# 主程序
# 创建celery实例对象
app = Celery("xiaolan")

# 把celery和django进行结合, 识别和加载django的配置文件
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘xiaolan.settings.dev‘)

# 对django框架进行初始化
django.setup()

# 通过app对象加载配置
app.config_from_object("mycelery.config")

# 加载任务
# 参数必须是一个列表, 里面的每一个都是任务的路径名称
# 列: app.autodiscover_tasks(["任务1", "任务2"])
app.autodiscover_tasks(["mycelery.sms"])

# 启动Celery的命令
# 强烈建议切换目录到mycelery目录下启动
# celery -A main worker --loglevel=info
5. 配置tasks.py, 把注册短信发送功能, 整合成一个任务函数,代码:
from mycelery.main import app
from .yuntongxun.sms import CCP
from xiaolan.settings import constants
import logging
from django.conf import settings
log = logging.getLogger("django")

@app.task(name="send_sms")
def send_sms(mobile, sms_code):
    """异步发送短信"""
    ccp = CCP()
    try:
        result = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRE//60 ], settings.SMS.get("_templateID"))
        return result
    except:
        log.error("发送短信验证码失败!手机号:%s" % mobile)
6. 把django中的短信发送模块和相关常量配置文件直接移动到当前sms任务目录中
mycelery/
├── config.py
├── __init__.py
├── main.py
└── sms/
    ├── __init__.py
    ├── tasks.py
    └── yuntongxun
        ├── CCPRestSDK.py
        ├── __init__.py
        ├── sms.py
        └── xmltojson.py
7. 在django里面, 我们调用celery来异步执行任务, 需要完成2个步骤:
# 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决
from mycelery.sms.tasks import send_sms

# 2. 调用任务函数,发布任务
send_sms.delay(mobile,sms_code)
# send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容
8. 启动项目
celery -A mycelery.main worker --loglevel=info

原文地址:https://blog.51cto.com/liuxiaolan/2465091

时间: 2024-10-13 01:09:30

django使用celery异步发送短信的相关文章

redis 基本操作-python 使用redis-手机验证接口-发送短信接口

目录 复习 今日内容 redis python使用redis 手机验证接口 发送短信接口 复习 """ 1.git项目开发 提供公钥成为开发者.copy项目.开发项目 先commit.再pull(可能出现冲突).最后push 特殊功能可以新建dev的子分支进行开发:git checkout -b 子分支, 切换回dev分支合并子分支内容:git merge 子分支 2.短信 注册并申请通信短信服务应用 安装指定模块,根据申请的应用配置得到发送短信的对象,对象调用方法完成短信的

Thinkphp 3.2中注册发送短信验证码功能(未进行盗刷处理版本)

好多人都感觉脱离了增删改查的功能都很难,实际上不是的,可能有些教程只是讲了核心的部分,导致一些基础不太好的同学有些蒙逼,本人作为一个基础不太好的同学,今天就从基础开始说说i哈 1.首先,想用短信服务,就得先有个阿里云帐号,然后去购买短信,购买后,然后你去生成一个app_id和key的值,声称这个值不用代码,在阿里云后台就可以生成的,然后生成一个模版,这个你们自己找就行,然后生成一个短信签名,短信签名是干什么的呢?给你们举个列子,一般广告短信都是[阿里云]迎十一大酬宾...或者[链家]十一大优惠,

移动MAS短信平台发送短信

MAS短信平台发送短信分为两种方式 参考文档下载 一.sdk调用 using mas.ecloud.sdkclient; using System; namespace 短信发送 { class Program { private static Client client = Client.instance; static void Main(string[] args) { string url = "";//身份认证地址,向客户经理获取. string apId = "&

Python使用redis-手机验证接口-发送短信验证

python使用redis 安装依赖 >: pip3 install redis 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 连接池的使用 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) 支持高并发 缓存使用:要额外的安装django_redis模块

(生鲜项目)17. drf实现发送短信验证码功能

第一步; 前期分析 由于之前在设计model的时候, 我们已经决定对code进行数据库保存, 所以这里我们应该使用 mixins.CreateModelMixin 同时, 用户发过来的手机号码, 我们在后端应该执行自己的验证, 包括 手机号码是否被注册 手机号码是否合法  [在settings.py中加上 REGEX_MOBILE="^1[358]\d{9}$|^147\d{8}$|^176\d{8}$"] 两次验证码的间隔是否大于60秒 基于以上考虑, 我们需要创建一个 serial

Android接收和发送短信

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码 activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

阿里大于发送短信(java)

一.短信签名设置 1.短信签名是什么? 签名是在短信内容开始或者末尾跟的品牌或者应用名称,设置签名有一下几个好处:增加品牌的曝光度,增强用户的记忆让用户能更清楚的知道正在使用的应用. 2.签名可不可以不设置? 如果您不设置签名,您通过接口发送的短信将很可能会进入短信审核流程(注:进入该流程需要短信发送平台的客服人工审核,将会影响短信的发送和到达时间)或者可能直接被网关驳回,所以,为了您平台用户使用短信的稳定性,设置短信签名是十分必要的. 3.短信签名怎么设置? 一般签名设置为您的品牌名.应用名.

asp发送短信验证码 pst方式

<script language="jscript" runat="server">  Array.prototype.get = function(x) { return this[x]; };  function parseJSON(strJSON) { return eval("(" + strJSON + ")"); }  </script><%if userid<>"

安卓学习之接收、发送短信

短信接收 android中当手机接收到一条短信后,会发送android.provider.Telephony.SMS_RECEIVED 的广播,这条广播中携带有与短信相关的所有数据.每个应用程序都可以在广播接收器里对他监听. 简单的短信接收程序: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main