Django短信验证码

在阿里云中购买短信服务https://www.aliyun.com/

将短信验证码保存到redis中, 存取速度快,减轻mysql数据库服务器压力。

redis中的键可以设置过期时间, 短信验证码可以设置2分钟过期时间,过期自动销毁。

获取redis连接

# 导入redis连接方法
from django_redis import get_redis_connection
# 使用默认配置连接到redis
cnn = get_redis_connection('default')
# 使用连接上的方法操作redis
cnn.hset('对象名','属性' ,'值')

使用redis的命令

查看手册http://doc.redisfans.com/

封装两个方法:

发送手机短信的方法

# 发送手机验证码
def send_phone_code(request):""":param request:  HttpRequest 请求对象:param phone:  手机号码:return: 返回结果"""try:# 获取手机号码phone = request.GET.get('phone')# 验证手机号是否正确phone_re = re.compile('^1[3-9]\d{9}$')res = re.search(phone_re, phone)if res:# 生成随机验证码code = "".join([str(random.randint(0, 9)) for _ in range(4)])print(code)print("===========================")# 保存到redis中 ,等你验证的时候使用r = get_redis_connection('default')r.set(tel, code)# 设置过期时间 redisr.expire(tel, 120)# 发送短信验证码__business_id = uuid.uuid1()# 信息params = "{\"code\":\"%s\"}" % coders = send_sms(__business_id, phone, "模板名称", "SMS_141905190", params)print(rs.decode('utf-8'))return {'ok': 1, 'code': 200}else:return {'ok': 0, 'code': 500, 'msg': '手机号码格式错误!'}except:return {'ok':0,'code':500,'msg':'短信验证码发送失败'}

发送的方法

# 发送短信
def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None):# 注意:不要更改REGION = "cn-hangzhou"PRODUCT_NAME = "Dysmsapi"DOMAIN = "dysmsapi.aliyuncs.com"# acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION)acs_client = AcsClient(settings.ACCESSKEYID, settings.ACCESSKEYSECRET, REGION)region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN)smsRequest = SendSmsRequest.SendSmsRequest()# 申请的短信模板编码,必填smsRequest.set_TemplateCode(template_code)# 短信模板变量参数if template_param is not None:smsRequest.set_TemplateParam(template_param)# 设置业务请求流水号,必填。smsRequest.set_OutId(business_id)# 短信签名smsRequest.set_SignName(sign_name)# 数据提交方式# smsRequest.set_method(MT.POST)# 数据提交格式# smsRequest.set_accept_format(FT.JSON)# 短信发送的号码列表,必填。smsRequest.set_PhoneNumbers(phone_numbers)# 调用短信发送接口,返回jsonsmsResponse = acs_client.do_action_with_exception(smsRequest)# TODO 业务处理return smsResponse  return smsResponse

创建视图函数并绑定路由

# 短信发送 视图函数
def sendMsg(request):return JsonResponse(send_phone_code(request))
# 8. 路由绑定
urlpatterns = [url(r'^sendMsg/$', sendMsg, name='sendMsg'), # 发短信
]

ajax 点击按钮 js 代码

{% block footer_js %}<script>$(function () {// 验证码按钮上绑定点击事件$(".yzm-hq").on('click', function () {// 由于this会在很多匿名函数中使用,先将其保存在一个变量中// 因为其他匿名函数中有自己的this,会和点击事件的this冲突var that = this;// 获取手机号码phone = $("input[name='phone']").val();// 通过ajax发送get请求$.get('{% url "sp_user:sendMsg" %}', {'phone': phone}, function (data) {//判断是否请求成功if (data.ok == 1) {// 设定 60 秒后可以重新发送验证码var time = 60;// 立马 将按钮禁用 防止重复点击提交$(that).attr('disabled', true);// 颜色设置为 灰色$(that).css({'backgroundColor': "gray"});// 将按钮提示文字改变showMsg(that, time);// 设置周期性执行, 周期性改变显示文字内容var timer = window.setInterval(function () {// 时间减少--time;// 显示文字showMsg(that, time);// 判断是否到期if (time == 0) {// 到期后清除定时器window.clearInterval(timer);// 启用按钮$(that).attr('disabled', false);// 改变颜色和文字内容$(that).css({'backgroundColor': "#76bb2a"});$(that).val("获取验证码");}}, 1000)} else {alert(data.msg);}})});//改变按钮 倒计时显示内容function showMsg(obj, time) {var msg = time + "秒后重新发送!";$(obj).val(msg);}})</script>
{% endblock %}

在RegisterView注册视图中验证提交的验证码核心代码

form表单中的核心验证验证码的代码

# 验证码字段添加
verify_code = forms.CharField(error_messages={"required": "请填写验证"})
# 单独使用一个方法校验 验证码
def clean_verify_code(self):# 验证验证码是否填写正确# 获取redis中的验证码r = get_redis_connection()tel = self.cleaned_data.get('phone')s_verify_code = r.get(tel)if not s_verify_code:raise forms.ValidationError("验证码已经过期")# 表单传入的验证码verify_code = self.cleaned_data.get('verify_code')# sid_verify_code = self.data.get('sid_verify_code')if int(verify_code) != int(s_verify_code):raise forms.ValidationError("验证码输入有误")return verify_code

Django短信验证码相关推荐

  1. Django博客系统(短信验证码)

    1. 容联云短信平台操作 1.容联云官网 容联云通讯网址:容联云通讯_短信平台.手机验证码.语音验证码.IM即时通讯.云呼叫系统等互联网通信服务 注册并登陆 2.容联云管理控制台 3.添加容联云测试手 ...

  2. Django使用容联云发送短信验证码时提示:172001,网络错误

    尝试用django连接容联云发送短信验证码,运行时出现了以下提示:{'172001':'网络错误'}:在网上查阅资料后得知,是因为python升级到2.7.9之后引入了一个新特性,当打开一个https ...

  3. Django项目后端实现注册功能---短信验证码(容联云)。

    django项目gitee仓库地址:https://gitee.com/YANGYUE0205/meiduo_project.git 一, 总体逻辑分析. 要点: 1.为了避免用户使用图形验证码恶意测 ...

  4. Django电商项目(八)短信验证码的前后端实现

    这篇文章我们开始完成短信验证码的前后端逻辑 后端逻辑 短信验证码接口设计 class SMSCodeView(View):"""短信验证码""&quo ...

  5. Django 使用短信验证码登录

    实现页面效果 实现思路 当输入手机号时需要检测该手机号是否注册过,然后点击登录时一起将手机号和验证吗提交给后端,再次校验手机号和验证码. 这里使用form的方式将字段渲染再前端,在form中校验字段. ...

  6. 面试-Django实现注册短信验证码发送

    注册的逻辑 注册需要的参数用户名,密码等,主要是图片验证码等输入 输入图片验证码之后,点击获得验证码,这时候要验证图片验证码的正确性 图片验证码正确才会发生短信,用户收到短信之后,输入后,点击注册就可 ...

  7. 【django】用户注册时短信验证码校验、避免频繁发送短信验证码【17】

    注册时短信验证后端逻辑 class CheckSMScodeView(View):def get(self,request,phone):'''用户注册时短信验证码的校验功能:param reques ...

  8. Python全栈(十一)Django项目之3.图形验证码实现逻辑和短信验证码初步实现

    文章目录 前言 一.图形验证码实现 1.图形验证码后端逻辑 2.图形验证码前端逻辑 二.短信验证码实现准备 1.短信验证码实现逻辑 2.容联云通讯短信平台 3.封装发送短信单例类 三.短信验证码后端逻 ...

  9. 美多商城之验证码(短信验证码2)

    二.短信验证码 2.3 短信验证码后端逻辑 1. 短信验证码接口设计 1.请求方式 选项 方案 请求方法 GET 请求地址 /sms_codes/(?P<mobile>1[3-9]\d{9 ...

  10. 美多商城之验证码(短信验证码1)

    二.短信验证码 2.1 短信验证码逻辑分析 知识要点 保存短信验证码是为注册做准备的. 为了避免用户使用图形验证码恶意测试,后端提取了图形验证码后,立即删除图形验证码. Django不具备发送短信的功 ...

最新文章

  1. 一步一步学lucene——(第四步:搜索篇)
  2. linux自学视频资料第四讲:目录
  3. 关于${ctx}拿不到值的问题
  4. 突袭HTML5之WebSocket入门3 - 通信模型socket.io
  5. Django View和URL
  6. 2019江苏高考作文_2019年关于现代组织的5大文章
  7. 队列-C语言-链表的实现方式
  8. java求职面试指南
  9. 用metasploit(msf)复现MS17-010(经典的永恒之蓝)SMB漏洞
  10. Codeforces Round 863 B Kayaking 贪心
  11. SuperMap iDesktop商场选址分析
  12. 连接服务器报错No supported authentication methods available
  13. python时间函数纳秒_python 纳秒
  14. 服务器安装vps系统,服务器安装vps系统
  15. koa2如何允许跨域
  16. Word小技巧--多级列表设置
  17. SpringCloudSpringCloud Alibaba、微服务架构、网站架构演变过程、Nacos、Feign远程调用、Load Balancer负载均衡、Sentinel限流、Hystriy
  18. html页面不论如何缩放也不改变布局的相对位置
  19. (7)UVM objection机制
  20. Ebay一些数据分析

热门文章

  1. HTTP协议相关的网络经典五层模型
  2. 搜索引擎使用的10个技巧
  3. 远程连接桌面计算机的凭据,凭据的远程桌面连接 - Windows Server | Microsoft Docs
  4. Course Z6110X0035 CC Lab 2
  5. FMI飞马网线上直播-《ELK Stack深入浅出》
  6. 一文学会Maven私服的搭建
  7. c语言json使用,cJSON使用(二)
  8. 【散文诗】STM32时钟框图
  9. 零度飘逸LDPY GhostWin7 Sp1纯净选择版V7.0(驱动增强版)
  10. arm架构下spinlock原理 (代码解读)