Django电商网站--短信验证码

为了防止恶意注册,需要在网站注册中引入短信验证码的功能,总体流程如下
image.png
此外,为了优化该过程,需要将SDK中发送短信的方法修改为单例类模式,防止高并发时占用大量内存,示例代码如下

class CCP(object):
    \_\_instance = Fales
    def \_\_new\_\_(cls, *args, **kwargs):
        if not \_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)
            return cls.\_instance

def send_template_sms(self,to, datas, tempId):
    result = self.rest.sendTemplateSMS(to, datas, tempId)
    print(result)
    if result.get('statusCode') == '000000':
        return 0
    else:
        return -1

此外,引入celery负责发送短信功能,使用户点击发送短信后 页面响应结果同发送短信并行进行,保证主线注册程序的顺利执行。celery性能优秀,可作为验证功能的操作工具。
为了避免恶意用户频繁请求发送短信,需要设置一个send\_flag 变量,初始值为False 类比厕所的门是开着的,当发送短信之后 send\_flag变为True,存进Redis 类比为有人进入厕所了,厕所门关闭,当短信过期之后send\_flag 变量重新变为false 厕所门又开了,  收到发送短信请求的时候,后端先提取send\_flag,校验是否为True,如果是的话,说明厕所门还是关着的,提示用户短信发送过于频繁。

你可能感兴趣的:(pythondjango)