为防止恶意注册,有必要在网站注册中引入短信验证码功能。实例类模式,防止高并发占用大量内存。示例代码如下classCCP(object):\_\_instance=Falesdef\_\_new\_\_(cls,*args,**kwargs):ifnot\_instance:cls.\_instance=super(CCP,cls).\_\_new\_\_(cls,*args,**kwargs)cls.\_instance.rest=REST(\_serverIP,\_serverPort,\_softVersion)cls.\_instance.rest.setAccount(\_accountSid,\_accountToken)cls.\_instance.rest.setAppId(\_appId)returncls.\_instancedefsend_template_sms(self,to,datas,tempId):result.resultMSs结束。(to,datas,tempId)print(result)ifresult.get('statusCode')=='000000':return0else:return-1另外为了防止短信任务的延迟阻塞页面响应发生,我们引入了celery来负责发送短信作为异步解决方案。Celery是一个简单、灵活、可靠的分布式系统,可以处理大量的消息。它可以在一台或多台机器上运行。一个celery进程每分钟可以处理数百条消息。数以千计的任务。与python中原有的threading模块相比,性能至少提升了10万倍,使得用户点击发送短信后,页面响应结果与短信并行执行,保证了主线的顺畅执行注册程序并避免阻塞。Celery使用生产者消费者设计模式。Producer:负责生成任务,即发送文本消息。消息队列(broker):负责承载任务。消费者:负责执行任务。本项目中生产者为美多商城,消费者为celery。中间人:消息/任务队列,任务/消息:发送短信。打个比方,生产者相当于厨师,盘子相当于中间人/消息队列,厨师做的菜相当于信息队列中的信息,食客相当于消费者。为了防止恶意用户频繁请求发送短信,需要设置一个send\_flag变量。初始值为False,表示厕所的门是开着的。发送短信后,send\_flag变为True,存储到Redis中,类似于有人进了厕所,厕所门关闭,当短信超时,send\_flag变量再次变为false,厕所门再次打开,当收到发送短信的请求时,后端先提取send\_flag,检查是否是真的,如果是,说明厕所门还关着,提示用户发短信太频繁。
