Django商城项目笔记No.4用户部分-注册接口-短信验证码实现celery异步

接上一篇,如何解决前后端请求跨域问题?

首先想一下,为什么图片验证码请求的也是后端的api.meiduo.site:8000,可是不会造成这样的错误呢?

因为图片验证码的请求其实是由浏览器本身发起的(修改img的src,浏览器发起请求),而点击获取验证码是由我们自己的代码主动发起的请求。

所以图片验证码不会出现跨站请求


我们需要先了解一个事情:

在发起跨站请求的时候,浏览器会发送一个option方式的请求(Http请求方式的一种),询问后端是否支持跨站请求。如下图描述:

所以我们增加中间件即可,而这个中间件第三方提供了:

参考文档https://github.com/ottoyiu/django-cors-headers/

中间层设置的时候要在最上边设置

添加白名单,这个配置放在dev的最后即可

# CORS
CORS_ORIGIN_WHITELIST = (
'127.0.0.1:8080',
'localhost:8080',
'www.meiduo.site:8080',
'api.meiduo.site:8000'
)
CORS_ALLOW_CREDENTIALS = True # 允许携带cookie

再次测试,出现倒计时,OK

查询redis中也有数据:

认识celery

分析图

安装celery:

Celery目录搭建

最终celery目录结构如下:

sms是专门存放发送短信业务逻辑的代码包

config.py是用于配置broker的

main是celery的主入口文件

代码如下:

config.py

broker_url = 'redis://127.0.0.1/14'

main.py

from celery import Celery
import os # 为celery使用django配置文件进行配置
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = 'md_mall.settings.dev' # 创建celery应用
celery_app = Celery('md_mall') # 导入celery配置
celery_app.config_from_object('celery_tasks.config') # 导入任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])

sms/tasks.py

from rest_framework import status
from rest_framework.response import Response from md_mall.utils.yuntongxun.sms import CCP
import logging
from celery_tasks.main import celery_app logger = logging.getLogger('django') @celery_app.task(name='send_sms_code')
def send_sms_code(mobile, sms_code, expires, temp_id):
"""发送短信验证码"""
try:
ccp = CCP()
result = ccp.send_template_sms(mobile, [sms_code, expires], temp_id)
except Exception as e:
logger.error("发送短信验证码[异常][mobile:%s, message:%s]" % (mobile, e))
else:
if result == 0:
logger.info("发送短信验证码[正常][mobile:%s]" % mobile)
else:
logger.warning("发送短信验证码[失败][mobile:%s]" % mobile)

celery任务启动方法

celery -A celery_tasks.main worker -l info

还有一个问题就是,这个任务执行,已经不需要给前端返回响应了,所以将异步任务里的return response代码都已经删掉了:

启动之后

测试

控制台

注意

在测试celery的时候,如果有修改任务的代码,比如修改了send_sms_code函数的代码,那就需要注意,需要重启worker,不然修改的代码不会生效

Django商城项目笔记No.6用户部分-注册接口-短信验证码实现celery异步的更多相关文章

  1. Django商城项目笔记No.5用户部分-注册接口-短信验证码

    Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...

  2. Django商城项目笔记No.9用户部分-注册接口签发JWTtoken

    Django商城项目笔记No.9用户部分-注册接口签发JWTtoken 我们在验证完用户的身份后(检验用户名和密码),需要向用户签发JWT,在需要用到用户身份信息的时候,还需核验用户的JWT. 关于签 ...

  3. Django商城项目笔记No.8用户部分-注册接口实现

    Django商城项目笔记No.8用户部分-注册接口实现 users的view.py中增加如下代码 class RegisterUserView(CreateAPIView): "" ...

  4. Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在

    Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在 判断用户名是否存在 后端视图代码实现,在users/view.py里编写如下代码 class UsernameCount ...

  5. Django商城项目笔记No.4用户部分-注册接口-图片验证码

    Django商城项目笔记No.4用户部分-注册接口-图片验证码 1.首先分析注册业务接口 1.1.分析可得,至少这么几个接口 图片验证码 短信验证码 用户名是否存在 手机号是否存在 整体注册接口 图片 ...

  6. Django商城项目笔记No.10用户部分-登录接口

    Django商城项目笔记No.10用户部分-登录接口 添加url路由 接下来第二步,增加返回内容: 增加结果如下: 配置:上边的方法定义了返回的内容都有哪些,那这个方法jwt还不知道,需要配置: 修改 ...

  7. Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid

    Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid 上一步获取QQ登录网址之后,测试登录之后本该跳转到这个界面 但是报错了: 新建oauth_callback.html & ...

  8. Django商城项目笔记No.11用户部分-QQ登录1获取QQ登录网址

    Django商城项目笔记No.11用户部分-QQ登录 QQ登录,亦即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目. 若想实现QQ登录,需要成为QQ互联 ...

  9. Django商城项目笔记No.3用户部分-用户模型类

    Django商城项目笔记No.3用户部分-用户模型类 Django提供了认证系统,文档资料https://yiyibooks.cn/xx/Django_1.11.6/topics/auth/index ...

随机推荐

  1. UVa 514 Rails(栈的应用)

    题目链接: https://cn.vjudge.net/problem/UVA-514 /* 问题 输入猜测出栈顺序,如果可能输出Yes,否则输出No 解题思路 貌似没有直接可以判定的方法,紫书上给出 ...

  2. [SPOJ 687]Repeats

    Description 题库链接 给出一个长度为 \(n\) 的字符串,求重复次数最多的连续重复子串. \(1\leq n\leq 50000\) Solution Code #include < ...

  3. Netty 高性能之道 FastThreadLocal 源码分析(快且安全)

    前言 Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,例如 Thread 类,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThre ...

  4. 【Mysql】Mysql 各个版本区别

    一.Mysql 各个版本区别: 1.MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.这也是我们通常用的MySQL的版本.根据不同的操作系统平台细分为多个版本 2 ...

  5. 积分之迷-2015决赛C语言B组第一题

    标题:积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 ...

  6. SORT AGAIN(hdu2523)

    SORT AGAIN Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. 解决hash冲突之分离链接法

    解决hash冲突之分离链接法 分离链接法:其做法就是将散列到同一个值的所有元素保存到一个表中. 这样讲可能比较抽象,下面看一个图就会很清楚,图如下 相应的实现可以用分离链接散列表来实现(其实就是一个l ...

  8. 初识Nosql

    ref:http://www.runoob.com/mongodb/nosql.html  https://blog.csdn.net/testcs_dn/article/details/512258 ...

  9. 【 js 基础 】【 源码学习 】源码设计 (更新了backbone分析)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析 第二部分:unders ...

  10. PHP获取本周的每一天的时间

    1.PHP获取未来一周的时间 public function getWeek() { for($i=0;$i<7;$i++) { $arr[$i]=date('Y-m-d',strtotime( ...