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\': \'发送短信成功\'})
相关文章: