问: 为什么要把验证码改为异步的?
答: 和异步相对应的是同步 用户输入验证码的时候要先发送验证码;
会有一个等待的过程; 用户要等待验证码的发送,发送之后要输入验证码;
是这样一个流程; 如果有10000个用户一起发送验证码,会导致程序堵塞,
程序就会中断执行;
(这是同步的弊端)
热然异步是 荣联云发送验证码,用户点击用户验证码 ,获取后端接口,
然后celery异步执行, redis存放执行的结果,直接把redis里面把验证码的,
结果取出来,告诉任务就可以了;(任务就是发送验证码)
celery异步执行大大减少了主程序的压力(不会导致主程序堵塞);
把耗时任务放进redis,有任务直接执行;
可能会遇到的报错
报错一 : object has no attribute 'decode'
原因:是没有启动异步项目; 或者是数据库里没有执行的结果信息;取出来的为空;
自然也是不能转码成功了;
解决方法:(celery -A 文件名 worker -l info -P eventlet)
celery -A my_celery.test_celery worker -l info -P eventlet
报错二.添加 这两个字段迁移时 先输入1 ; 然后 输入 timezone.now
created_date = models.DateTimeField(default=now(),verbose_name='注册时间')
last_ogin_data = models.DateTimeField(verbose_name='最后登录时间')
三:.
在视图中连接数据库一定要 用 localhost不能用(127.0.0.1); 不然后报错连接不上redis;
记不住的导包和配置 以及知识盲区 :
1.now 是干啥的
# now表示此时时间;
from django.utils.timezone import now
2.加密查询 和 存储密码
from django.contrib.auth.hashers import make_password,check_password
make_password 加密存储密码 如:
new_pwd = make_password(pwd) 这是对前段传递过来的密码进行加密
check_password 既然是 加密存储; 查询也必须要以这种形式查询密码如:
check_password(pwd, user.password):
3.
构造key从redis中查看执行结果
key = "celery-task-meta-" + resp.id