29_使用celery发送短信
使用celery 异步发送短信 (celery一般用来处理比较耗时间的请求)
1. 安装celery
pip install celery
2. 使用
在项目根目录下
下创建celery_tasks用于保存celery异步任务。
- 在celery_tasks目录下创建config.py文件,用于保存celery的配置信息
# config.py
broker_url = "redis://127.0.0.1/15"
在 celery_tasks 目录下创建main.py 文件
# main.py import osfrom celery import Celery# 为celery 使用django 进行配置if not os.getenv('DJANGO_SETTINGS_MODULE'):# os.environ('DJANGO_SETTINGS_MODULE', 'cheng_pro.settings') # 这个文件是从 manage.py 文件中复制过来的os.environ['DJANGO_SETTINGS_MODULE'] = 'cheng_pro.settings' # 这样子写也可以,赋一个值# 创建一个实例 app = Celery('sms_captcha')# 导入配置 app.config_from_object('celery_tasks.config') # config.py 配置文件# 自定义注册任务 app.autodiscover_tasks(['celery_tasks.sms']) # 加入发送短信任务
在celery_tasks目录下创建sms目录,用于放置发送短信的异步任务相关代码。 如果以后要发送邮件,则再在该文件夹(celery_tasks)下创建一个email之类的目录,存放相应的代码就可以了
在celery_tasks/sms/目录下创建task.py文件,用于保存发送短信的异步任务
# celery_tasks/sms/task.py import loggingfrom celery_tasks.main import app from utils.aliyum.aliyum import send from utils.json_res import json_response from utils.res_code import Code, error_maplogger = logging.getLogger('django')# 发送短信验证码 @app.task(name='send_sms_captcha') def send_sms_captcha(mobile, captcha):"""发送短信:return:"""try:res = send(mobile, captcha)except Exception as e:logger.error('发送短信异常{{ {mobile}: {captcha}, e: {e} }}'.format(mobile=mobile, captcha=captcha, e=e))return 0else:if res == '发送短信失败':logger.warning('向 {} 发送短信失败'.format(mobile))return 0else:logger.info('向 {} 发送短信验证码成功: {{ {}: {} }}'.format(mobile, mobile, captcha))return 1
改写 发送短信视图
# views.py 使用 celery 异步发送短信 (处理耗时任务) def send_sms_captcha(request):"""发送短信验证码url: /sms_captcha/method: POST:param request::return:"""# 1. 创建表单, 校验参数form = CheckSendSmsCaptcha(request.POST)# 2. 校验参数, 返回结果if form.is_valid():# 校验通过# 获取需要的参数mobile = form.cleaned_data.get('mobile')# 生成要发送的短信验证码内容captcha = ''.join([random.choice(string.digits) for _ in range(6)])logger.info('要发送的短信验证码内容为: {}'.format(captcha))# 使用 celery 异步发送短信res = sms_task.send_sms_captcha(mobile, captcha)if res == 1:# 短信验证码发送成功# 存储redis_conn = get_redis_connection(alias='verification')pipeline = redis_conn.pipeline()try:redis_conn.setex('sms_{}'.format(mobile), 500, captcha)redis_conn.setex('sms_flag_{}'.format(mobile), 60, mobile)pipeline.execute()except Exception as e:logger.error('redis执行异常, {{ e: {} }}'.format(e))return json_response(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR]) # 返回未知错误return json_response(errmsg='短信验证码发送成功')else:# 发送短信失败return json_response(errno=Code.SMSERROR, errmsg=error_map[Code.SMSERROR])# """# # 发送短信# res = send(mobile, captcha)# if res == '发送短信失败':# logger.warning('向 {} 发送短信失败'.format(mobile))# return json_response(errno=Code.SMSFAIL, errmsg=error_map[Code.SMSFAIL])## # 保存短信验证码 和 该手机号码的 发送记录# redis_conn = get_redis_connection(alias='verification') # 连接redis# pipeline = redis_conn.pipeline() # 建立redis 管道# try:# redis_conn.setex('sms_captcha_{}'.format(mobile), 500, captcha)# # 保存60s发送记录# redis_conn.setex('sms_flag_{}'.format(mobile), 60, mobile)# # 执行# pipeline.execute()## except Exception as e:# # redis执行异常# logger.warning('redis执行异常, {}'.format(e))# # 返回未知错误# return json_response(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])## logger.info('成功向 {} 发送短信, captcha: {}'.format(mobile, captcha))# return json_response(errmsg='短信验证码发送成功,请注意查收')# """else:# 校验不通过logger.error(form.errors) # 记录个日志# 定义一个空的错误信息列表err_msg_list = []for items in form.errors.get_json_data().values():err_msg_list.append(items[0].get('message'))# 将所有错误信息拼接成字符串err_msg_str = '/'.join(err_msg_list)return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
创建 workon 任务
在终端中,进入到与celery_tasks 同级的目录下(我上面是创建到项目根目录下了), 所以我们此时进入到项目的根目录下, 执行以下命令:
celery -A celery_tasks.main worker -l info-A 选项指定 celery 实例 app 的位置-l 选项指定日志级别, -l 是 --loglevel 的缩略形式
转载于:https://www.cnblogs.com/nichengshishaonian/p/11590410.html
29_使用celery发送短信相关推荐
- Celery实现短信注册接口
介绍: 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用cele ...
- 使用容联云Celery异步发送短信验证码
文章目录 Celery/容联云 安装与命令 安装 celery启动命令 一.Celery 1.配置Celery 2.创建任务文件 二.容联云 1. 配置容联云 settings.py 2. 使用Sms ...
- 手机异步发送短信验证码解决方案-Celery+redis
Celery介绍和使用 一.Celery介绍: 一个简单.灵活且可靠.处理大量消息的分布式系统,可以在一台或者多台机器上运行. Celery是一个功能完备即插即用的任务队列 单个 Celery 进程每 ...
- 魔方APP项目-06-用户注册,完成短信验证码的校验、基于Celery实现短信异步发送、用户登录,jwt登陆认证、服务端提供用户登录的API接口
一.用户注册- 1.完成短信验证码的校验 application.utils.language.message,代码: class ErrorMessage():ok = "ok" ...
- luffcc项目-06-使用容联云发送短信、Celery
一.使用容联云发送短信 https://www.yuntongxun.com/ 目录结构 sms.py import json from .SmsSDK import SmsSDK from djan ...
- Flask项目--发送短信验证码
1.后端代码 具体代码如下: # GET /api/v1.0/sms_codes/<mobile>?image_code=xxxx&image_code_id=xxxx @api. ...
- flask容联云发送短信验证码和异步发送
容联云地址:https://www.yuntongxun.com/ 获取短信验证码流程图 容联云配置 在容联云官网注册一个账号,发送短信验证码必须使用三个ID ACCOUNT SID (主账户ID ...
- 美多商城项目发送短信优化
#发送短信优化 阻止请求频繁 + 管道优化redis储存 + celery异步 class SMS_CODEView(APIView):def get(self,request,mobile):con ...
- JAVA如何实现发送短信
今天看到了一个需求,需要做一个发送短信的功能,网上找了找,大概有这几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;( ...
最新文章
- 20018-05-16 第十天
- CMake编译Makefile
- Cisco常见路由器密码和版本恢复方法
- php 检测数组内是否有空值,PHP判断数组是否为空的常用方法
- IOS添加pch预编译文件
- Spring Data Solr教程:CRUD(差不多)
- linux标准I/O——按行输入和输出
- Linux网络协议栈:网络包接收过程
- 幻想英雄2-战神再起折扣号新手入门攻略
- 项目周期一般多久_收藏!布袋除尘器清灰周期一般多久合适?
- Oracle分页总汇
- 写了一百万行代码是什么体验?
- JAVAWeb项目 微型商城项目-------(七)后台添加用户管理和商品类型管理操作
- linux下STM32开发环境搭建
- SNP基因数据质控调研
- 未能加载“xxx”程序集
- 计算机专业夏令营英语面试范文,夏令营面试英文自我介绍
- java eml 附件_向EML文件追加附件的Java实现
- 本地通用验证码识别DLL/通用滑块识别/文字点选/图标点选/OCR文字识别/本地识别DLL
- 通俗易懂看RB-tree(二)