美多商城用户注册-展示用户注册页面-补充短信验证码后端逻辑-避免频发发送-pipeline操作redis-7

补充短信验证码前后端逻辑

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()

 

posted @ 2024-01-19 15:35  疯狂的米粒儿  阅读(3)  评论(0编辑  收藏  举报