完整电商项目--(三)验证码操作(3):短信验证码 -- cerely-RabbitMQ实现异步

什么是cerely

什么是RabbitMQ

  • 这个是我们用来作为中间人的工具。
    在这里插入图片描述
坦然讲,目前只能使用这些工具,完成基本的业务需求。暂时没有更深入化的理解。所以介绍和理解过于书面化,少些个人的理解和感悟。 以后会更新,此项目中各个技术点的研究专栏。

使用cerely进行异步,发送短信验证码

  • 我们同样参考官方文档:在Celery和Django中使用
  • (1)安装celery
    在这里插入图片描述
  • (2) 创建Celery实例并加载配置(下面我们直接引入官方文档的例子)
  • 这是一般的目录结构,只要django版本1.8以上都是这样。
    在这里插入图片描述
  • 引入官网例子
from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
# 为“ celery”程序设置默认的Django设置模块,意思就是读取django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

# 创建celery 对象, ‘proj’可以为任意名称
app = Celery('proj')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
#在这里使用字符串意味着工作人员不必序列化
#子进程的配置对象。
#-namespace ='CELERY'表示所有与celery相关的配置密钥
#应该带有`CELERY_`前缀。
# 加载celery的配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
# 从所有已注册的Django应用程序配置中加载任务模块。(就是加载编写的任务,我们是等下编写 发送短信验证码的任务)
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

在这里插入图片描述

  • (3) 将改cerely模块,加载到django应用模块
    在这里插入图片描述
如果你读上述中的步骤还不清楚,官网下文立即给出了各个步骤的解释:(真的详细)

在这里插入图片描述

  • 需要注意的地方:
    • 里面类似 :‘proj.settings’ 这样的地方美食需要填写你自己的项目配置文件的位置
    • proj :就是项目的意思。可以填写自己的项目名字
app.config_from_object('django.conf:settings', namespace='CELERY')
  • 这一句代码,实际上下文已经讲解的很清楚了! 意思就是 前面的:(1) ‘django.conf:settings’ 表示在django的配置文件中查找 celery的配置,好处是 不必使用多个配置文件,而直接从Django设置中配置Celery。 (2) namespace=‘CELERY’ 表示的是 ,cerely配置项的标记,cerely寻找自己的配置选项时,便会 以开头为 CELERY_开头的来认定。

  • 补充:(我们当然可以单独命名一个文件路径,以字符串得形式填写进去 路径。不必和django的配置项写在一起)例如:
    在这里插入图片描述
    在这里插入图片描述

  • (4)创建任务:
    可以看到截图的最后面,已经说明了,任务的目录结构,比这创建即可!
    在这里插入图片描述
    我新建了一个文件夹用来专门存放这些。(文章中的任务是放到各个应用下方的)

  • (5)创建任务

  • (6)配置默认就是RebbitMQ当做工人。
    在这里插入图片描述

  • 我们需要指定它的url链接,在刚刚的配置文件当中(config.py)


broker_url= 'amqp://guest:guest@127.0.0.1:5672'
  • 下面就可以开始创建任务了
from celery_tasks.main import app
from meiduo_mall.libs.yuntongxun.sms import CCP
from . import constants

# bind:保证task对象会作为第一个参数自动传入
# name:异步任务别名
# retry_backoff:异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s, 每尝试一次的时间间隔。
# max_retries:异常自动重试次数的上限
# retry_backoff=3 任务尝试次数
# 都是关键字参数,可写可不写

@app.task(bind=True, name='send_sms', retry_backoff=3)
def send_sms(self, mobile, sms_code):
    # self 表示任务对象本身,到时候一创建任务就有了
    # 将耗时的代码封装在一个方法中
    # ccp = CCP()
    # ret= ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRES], 1)
    # ret的返回值 是由云通讯决定的,成功时返回值为1
    # if ret !=0:
    #     raise self.retry(exc=Exception('发送短信失败'), max_retries=3)
    # return ret

    # 这里要注意,当修改代码之后, celery要重启之后才能执行新的代码
    print("@"*50)
    print(sms_code)

def hello():
    print('ok')
因为前面讲过是练习,所以我们注释了这些真的发送短信验证码的代码。
  • 启动
$ celery -A proj worker -l info

对应我的目录结构就是
$ celery -A celery_tasks.main worker -l info
需要注意的是,需要先移动到项目目录下方,因为celery_tasks.main是一个相对的位置

在这里插入图片描述
在这里插入图片描述

下面最后一步,启动完之后,我们只需要将任务添加到:

# 从所有已注册的Django应用程序配置中加载任务模块。(就是加载编写的任务,我们是等下编写 发送短信验证码的任务)
app.autodiscover_tasks()

在这里插入图片描述

如此,当我们启动工人。就可以正常使用异步发送短信验证码了!
  • 测试:
    下面我们进行测试:
    在这里插入图片描述
    点击发送验证码,前端显示进入60秒倒计时:
    在这里插入图片描述
    一切正常!

当然上述都只是入门最基本的操作(阅读官方文档实现简单操作不难)。后续将会深入学习理解这些东西!加油。

over!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值