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. 知乎热议:985 计算机视觉研究生找不到工作怎么办?
  2. 机器人 知乎碧桂园_从房地产大亨到跨界造“机器人”,碧桂园葫芦里卖着什么药?...
  3. MERGE INTO
  4. 阿里软件测试二面通过率,阿里测开一面二面三面hr面
  5. Python函数式编程简介(五)偏函数
  6. win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题
  7. 如何在PHP开启gzip页面压缩实例
  8. 11.22Daily Scrum(2)
  9. js img转换base64
  10. ei eo eq什么意思_音响中的EQ是什么意思呀?
  11. CSS中常见的6种文本样式
  12. NAND Flash和NOR Flash的比较
  13. Maya中英文对照表(四)
  14. 那些漂亮的sci论文图一般用什么软件制作的?
  15. 大学计算机思维导图_3款免费在线思维导图网站,你一定要收藏一个!
  16. ADC信噪比计算公式
  17. 【逆向】【PE入门】使用PEView分析PE文件
  18. js对象扁平化:Javascript对象进行扁平化处理
  19. 130个资源网站,总有一个你用得着
  20. android6.0原生壁纸,惊呆了!安卓6.0壁纸竟然是这样得来的

热门文章

  1. python爬虫实训总结报告_python爬虫简单总结(一)
  2. 黄山行之《黄山前山游》
  3. chmod 777 授权无效
  4. 小小总结之渗透测试面试题以及答案
  5. Python数据类型之三(列表)
  6. 产品没出来提前做推广_如果您不知道该怎么做,请提早和经常提出问题
  7. 农用化学活性成分的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. linux调整tmp目录,linux – 如何将默认/ tmp更改为/ home / user / tmp
  9. python3图片文字识别
  10. 谈谈百度搜索解封经验与技巧(转)