短信验证码逻辑
Posted oklizz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短信验证码逻辑相关的知识,希望对你有一定的参考价值。
class SMSCodeView(View):
"""短信验证码"""
def get(self, reqeust, mobile):
"""
:param reqeust: 请求对象
:param mobile: 手机号
:return: JSON
"""
# 1. 接收参数
image_code_client = reqeust.GET.get('image_code')
uuid = reqeust.GET.get('image_code_id')
# 2. 校验参数
if not all([image_code_client, uuid]):
return http.JsonResponse('code': RETCODE.NECESSARYPARAMERR,
'errmsg': '缺少必传参数')
# 3. 创建连接到redis的对象
redis_conn = get_redis_connection('verify_code')
# 4. 提取图形验证码
image_code_server = redis_conn.get('img_%s' % uuid)
if image_code_server is None:
# 图形验证码过期或者不存在
return http.JsonResponse('code': RETCODE.IMAGECODEERR,
'errmsg': '图形验证码失效')
# 5. 删除图形验证码,避免恶意测试图形验证码
try:
redis_conn.delete('img_%s' % uuid)
except Exception as e:
logger.error(e)
# 6. 对比图形验证码
# bytes 转字符串
image_code_server = image_code_server.decode()
# 转小写后比较
if image_code_client.lower() != image_code_server.lower():
return http.JsonResponse('code': RETCODE.IMAGECODEERR,
'errmsg': '输入图形验证码有误')
# 7. 生成短信验证码:生成6位数验证码
sms_code = '%06d' % random.randint(0, 999999)
logger.info(sms_code)
# 8. 保存短信验证码
# 短信验证码有效期,单位:秒
# SMS_CODE_REDIS_EXPIRES = 300
redis_conn.setex('sms_code_%s' % mobile,
constants.SMS_CODE_REDIS_EXPIRES,
sms_code)
# 9. 发送短信验证码
# 短信模板
# SMS_CODE_REDIS_EXPIRES // 60 = 5min
# SEND_SMS_TEMPLATE_ID = 1
CCP().send_template_sms(mobile,[sms_code, 5],
constants.SEND_SMS_TEMPLATE_ID)
# 10. 响应结果
return http.JsonResponse('code': RETCODE.OK,
'errmsg': '发送短信成功')
以上是关于短信验证码逻辑的主要内容,如果未能解决你的问题,请参考以下文章