1.注册荣联云账号

1.1注册账号

1.2 登录即可看到开发者账号信息

1.3 添加测试账号

2.使用容联云发送代码测试

  1. '''1. 安装容联云sdk'''
  2. pip install ronglian_sms_sdk
  3. # 免费测试文档地址:https://doc.yuntongxun.com/p/5a531a353b8496dd00dcdfe2
  4. '''2. 短信发送代码'''
  5. # libs/rl_sms.py
  6. from ronglian_sms_sdk import SmsSDK
  7. accId = '8a216da8747ac98201749c0de38723b7'
  8. accToken = '86072b540b4648229b27400414150ef2'
  9. appId = '8a216da8747ac98201749c0de45123be'
  10. def send_message(phone, datas):
  11. sdk = SmsSDK(accId, accToken, appId)
  12. tid = '1' # 测试模板id为: 1. 内容为: 【云通讯】您的验证码是{1},请于{2}分钟内正确输入。
  13. # mobile = '13303479527'
  14. # datas = ('666777', '5')
  15. # 模板中的参数按照位置传递
  16. resp = sdk.sendMessage(tid, phone, datas)
  17. return resp

3.在视图函数中使用

3.1 verifications/urls.py中添加路由

  1. urlpatterns = [
  2. path('sms_codes/', views.SmsCodeView.as_view()),
  3. ]

3.2 写视图函数

  1. # verifications/views.py
  2. from rest_framework.permissions import AllowAny
  3. from rest_framework.views import APIView
  4. from rest_framework.response import Response
  5. import re
  6. import random
  7. from utils.rl_sms import send_message
  8. class SmsCodeView(APIView):
  9. # 1. 所有人可以访问
  10. permission_classes = (AllowAny,)
  11. def post(self, request):
  12. # 1. 获取参数
  13. phone = request.data.get('phone')
  14. image_code = request.data.get('image_code')
  15. image_code_uuid = request.data.get('image_code_uuid')
  16. # 2. 检查参数
  17. if not all([phone, image_code, image_code_uuid]):
  18. return Response({"code": 999, "msg": "参数不全"})
  19. if not re.match(r'^1[3456789]\d{9}$', phone):
  20. return Response({"code": 999, "msg": "手机号码不正确"})
  21. # 3. 检查是否发送
  22. redis_client = get_redis_connection('img_code')
  23. phone_exists = redis_client.get(phone)
  24. if phone_exists:
  25. return Response({"code": 999, "msg": "频繁发送, 请稍后再试"})
  26. redis_image_code = redis_client.get(image_code_uuid) # bytes
  27. if redis_image_code:
  28. # bytes 转成 string
  29. redis_image_code = redis_image_code.decode()
  30. # 比较用户提供的图片内容是否和redis中保存的一致
  31. if image_code.upper() != redis_image_code:
  32. return Response({'code': 999, 'msg': '图片验证码不正确'})
  33. # 4. 发送
  34. code = '%06d' % random.randint(0, 999999) # 随机6位验证码
  35. send_resp = send_message(phone, (code, "5"))
  36. # 5.1 保存code 到 redis中
  37. # redis_client.setex(phone, 60 * 5, code)# phone:code, 5分钟有效期
  38. # 5.2 从redis中删除这个图片验证码, 以防再次被使用
  39. # redis_client.delete(image_code_uuid)
  40. # 5.3 使用 pipeline 批量操作
  41. pl = redis_client.pipeline()
  42. pl.setex(phone, 60 * 5, code)
  43. pl.delete(image_code_uuid)
  44. pl.execute()
  45. # 6. 返回结果
  46. return Response({"code": 0, "msg": "短信发送成功"})

Django----短信验证接口的更多相关文章

  1. day6(短信验证接口)

    1.注册容联云账号 1.1注册账号 https://www.yuntongxun.com/user/login  1.2登录即可看到开发者账号信息 1.3 添加测试账号 2.使用容联云发送代码测试 ' ...

  2. 注册登录页面修订-Python使用redis-手机验证接口-发送短信验证

    登录页面修订 views.Login.vue <template> <div class="login box"> <img src="@/ ...

  3. thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO

    为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...

  4. django-实现登录短信验证

    功能演示 核心任务 前端功能: 点击按钮Ajax调用发送验证码功能 输完验证码后Ajax调用验证功能 后端功能: 功能1:发送验证码功能 功能2:验证码检查 后台核心逻辑(不需要手写) 功能3:发短信 ...

  5. thinkphp实现短信验证注册

    前言 注册时经常需要用到短信验证码,本文记录一下思路和具体实现. 短信验证平台使用云片,短信验证码的生成使用thinkphp. 思路 1.用户输入手机号,请求获取短信验证码. 2.thinkphp生成 ...

  6. Mob短信验证的具体使用

    原文著作权地址:http://www.jb51.net/article/84946.htm demo地址:http://git.oschina.net/lizhanqi/MobSMSDemo 一.前言 ...

  7. 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场

    前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...

  8. ThinkPHP3.2.3框架下接入阿里云短信服务接口实现:注册登录

    首先介绍下短信注册登录流程: 注册页面点击获取手机号验证码按钮,用jquery的click事件POST或GET方法把手机号发送到后台控制器: 后台控制器创建函数,收到手机号后生成随机码,例如:6位的随 ...

  9. Luffy之注册认证(容联云通讯短信验证)

    用户的注册认证 前端显示注册页面并调整首页头部和登陆页面的注册按钮的链接. 注册页面Register,主要是通过登录页面进行改成而成. 先构造前端页面 <template> <div ...

  10. 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证

    这次公开课请来的嘉宾对自己的简介是: 连续创业失败的创业导师:伪天使投资人:某非知名私立大学创办人兼校长:业余时间在本校通信安全实验室打杂. 自从他在黑客大会上演讲<伪基站高级利用技术——彻底攻 ...

随机推荐

  1. 云服务器部署scrapyd爬虫

    Scrapyd部署爬虫项目 GitHub:https://github.com/scrapy/scrapyd API 文档:http://scrapyd.readthedocs.io/en/stabl ...

  2. 我的 Redis 被入侵了

    好吧,我也做了回标题党,像我这么细心的同学,怎么可能让服务器被入侵呢? 其实是这样的,昨天我和一个朋友聊天,他说他自己有一台云服务器运行了 Redis 数据库,有一天突然发现数据库里的数据全没了,只剩 ...

  3. 使用Haproxy代理rabbitmq集群,用keepalive保证haproxy高可用

    原文地址:https://www.jianshu.com/p/440b8e1d5339 使用Haproxy代理rabbitmq集群 上一篇文章教了rabbitmq集群搭建.但是这样搭建出来的集群是3个 ...

  4. Java_基础(一)

    注释 单行注释: // 多行注释: /*开头, */结尾, 可跨行, 可嵌入 public static void main(String[] args/* 哈哈 */) 文档注释: /** 开头, ...

  5. 前言「HarmonyOS应用开发基础篇」

    场景一.随着智能设备种类的不断增多,我们基本上每人都有好几台智能设备,比如智能手机,平板,耳机,音响,穿戴设备等等.这些设备都具有独立性,偶尔的组合也是我们通过手动去搭配,并且不一定能够完全组合在一起 ...

  6. 【RabbitMQ-7】RabbitMQ—交换机标识符

    死信队列概念 死信队列(Dead Letter Exchange),死信交换器.当业务队列中的消息被拒绝或者过期或者超过队列的最大长度时,消息会被丢弃,但若是配置了死信队列,那么消息可以被重新发布到另 ...

  7. 经典c程序100例 1-10

    ==1--10 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不 ...

  8. Effective Modern C++ ——条款5 优先选择auto,而非显式型别声明

    条款5 对于auto ,他的好处不仅仅是少打一些字这么简单. 首先在声明的时候, 使用auto会让我们养成初始化的习惯: auto x;//编译不通过必须初始化. 再次对于auto而言,它可以让我们定 ...

  9. linux 协议栈 实现--编码小知识分析

    unlikely 以及likely 作用: rcu_read_lock  以及rcu_read_unlock 作用: rcu_dereference .rcu_dereference_protecte ...

  10. Markdown 常用语言关键字

    Markdown 语法高亮支持的语言还是比较多的,记下来备用. 语言名 关键字 Bash bash CoffeeScript coffeescript C++ cpp C# cs CSS css Di ...