补充短信验证码前后端逻辑
1.补充注册短信验证码后端逻辑
在user中的views中添加添加短信验证码的参数
sms_code_client = request.POST.get('sms_code')
保存注册数据之前,对比短信验证码,在views中添加校验
redis_conn = get_redis_connection('verify_code')
sms_code_server = redis_conn.get('sms_%s' % mobile)
if sms_code_server is None:
return render(request, 'register.html', {'sms_code_errmsg':'无效的短信验证码'})
if sms_code_client != sms_code_server.decode():
return render(request, 'register.html', {'sms_code_errmsg': '输入短信验证码有误'})
2.补充注册时短信验证前端逻辑 register.html
<li>
<label>短信验证码:</label>
<input type="text" v-model="sms_code" @blur="check_sms_code" name="sms_code" id="msg_code" class="msg_input">
<a @click="send_sms_code" class="get_msg_code">[[ sms_code_tip ]]</a>
<span v-show="error_sms_code" class="error_tip">[[ error_sms_code_message ]]</span>
{% if sms_code_errmsg %}
<span class="error_tip">{{ sms_code_errmsg }} </span>
{% endif %}
</li>
避免短信验证码频发发送
1.避免频繁发送短信验证码逻辑分析
2避免频发发送短信验证码实现逻辑
在verifications中的views中
send_flag = redis_conn.get('send_flag_%s' % mobile)
if send_flag:
return http.JsonResponse({'code': RETCODE.THROTTLINGERR, 'errmsg': '发送短信过于频繁'})
重新写入send_flag
# 保存短信验证码
redis_conn.setex('sms_%s' % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)
# 重新写入send_flag
redis_conn.setex('send_flag_%s' % mobile, constants.SEND_SMS_CODE_INTERVAL, 1)
3.界面渲染频繁发送短信提示信息,register.js
if (response.data.code == '4001') { //图形验证码错误
this.error_image_code_message = response.data.errmsg;
this.error_image_code = true;
} else { // 4002短信验证码错误
this.error_sms_code_message = response.data.errmsg;
this.error_sms_code = true;
}
pipeline操作redis数据库
pipeline操作redis数据库
1.创建redis管道
2.将redis请求添加到队列
3.执行请求
代码实现 需要安装django-redis、redis
# 创建Redis管道
pl = redis_conn.pipeline()
# 将Redis请求添加到队列
pl.setex('sms_%s' % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)
pl.setex('send_flag_%s' % mobile, constants.SEND_SMS_CODE_INTERVAL, 1)
# 执行请求
pl.execute()