1.注册容联云账号

1.1注册账号

https://www.yuntongxun.com/user/login

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

1.3 添加测试账号

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

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

libs/rl_sms.py

3.在视图函数中使用

3.1 在verifications/urls.py中添加路由

urlpatterns = [

  path('sms_codes/', views.SmsCodeView.as_view()),
]
3.2写视图函数

from rest_framework.permissions import AllowAny
from rest_framework.views import APIView
from rest_framework.response import Response
import re
import random from utils.rl_sms import send_message
from user.models import User class SmsCodeView(APIView):
#所有人可以访问
permission_classes = (AllowAny,)
def post(self, request, redis_client=None):
# 1. 获取参数
phone = request.data.get('phone')
image_code = request.data.get('image_code')
image_code_uuid = request.data.get('image_code_uuid')
# 2. 检查参数
if not all([phone, image_code, image_code_uuid]):
return Response({"code": 999, "msg": "参数不全"})
if not re.match(r'^1[3456789]\d{9}$', phone):
return Response({"code": 999, "msg": "手机号码不正确"})
# 3. 检查是否发送
redis_client = get_redis_connection('img_code')
phone_exists = redis_client.get(phone)
# if phone_exists:
# return Response({"code": 999, "msg": "频繁发送, 请稍后再试"})
redis_image_code = redis_client.get(image_code_uuid) # bytes
if redis_image_code:
# bytes 转成 string
redis_image_code = redis_image_code.decode()
# 比较用户提供的图片内容是否和redis中保存的一致
if image_code.upper() != redis_image_code:
return Response({'code': 999, 'msg': '图片验证码不正确'})
#4.发送
code = '%06d' % random.randint(0, 999999) # 随机6位验证码
send_resp = send_message(phone, (code, "5"))
# 5.1 保存code 到 redis中
# redis_client.setex(phone, 60 * 5, code) # phone:code, 5分钟有效期
# 5.2 从redis中删除这个图片验证码, 以防再次被使用
#redis_client.delete(image_code_uuid)
# 5.3 使用 pipeline 批量操作
pl = redis_client.pipeline()
pl.setex(phone, 60 * 5, code)
pl.delete(image_code_uuid)
pl.execute()
#6.返回结果
return Response({"code": 0, "msg": "短信发送成功"})

Views.py

day6(短信验证接口)的更多相关文章

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

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

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

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

  3. thinkphp实现短信验证注册

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

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

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

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

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

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

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

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

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

  8. 短信验证登陆-中国网建提供的SMS短信平台

    一.JAVA发送手机短信常见的有三种方式(如下所列): 使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 使用短信mao的方式进行短信 ...

  9. 如何实现php手机短信验证功能

    http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1677 下载php源代码 现在网站在建设网 ...

随机推荐

  1. 快快使用ModelArts,零基础小白也能玩转AI!

    摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...

  2. 【Kata Daily 190906】Vasya - Clerk(职员)

    题目: The new "Avengers" movie has just been released! There are a lot of people at the cine ...

  3. 【SpringBoot】13. logback日志记录

    logback日志记录 Spring Boot 1.5.19.RELEASE 1.导入相关jar包 在spring-boot-starter-web 中已经包含 2.添加logback.xml配置文件 ...

  4. 获取元素计算样式getComputedStyle()与currentStyle

    window.getComputedStyle()方法是标准化接口,返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有CSS属性的值. 私有的CSS属性值可以通过对 ...

  5. 简单STL

    string: string s="5418340"; sort(s.begin(),s.end()); cout<<s; /**begin是头迭代器,end是尾迭代器 ...

  6. Go语言内存分配(简述 转)

    在Go语言里,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由Go在底层完成的.虽然开发者在写代码时不必过度关心内存从分配到回收这个过程,但是Go的内存分配策略里有不少有意思的设计,通过了 ...

  7. #paragma详解

       #Pragma是预处理指令,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#Pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统 ...

  8. 设计模式(一)--工厂模式(Go实现)

    package Factory import "fmt" type Restaurant interface { GetFood() } type Donglaishun stru ...

  9. Python_自动化测试_项目

    <论坛自动化测试项目> 1.自行选择合适的社区 2.功能要求 5个以上,不包含登录页 3.多手动测试   多用selenium IDE 4.生成测试报告,发送邮件 5.计划任务定时完成 6 ...

  10. SSTI Flask

    1.什么是SSTI?什么是Flask? ​ SSTI称为服务端模板注入,主要为Python.Java.PHP的框架在使用渲染函数时,由于代码不规范或者对于用户输入过于信任而导致产生了SSTI.类似于S ...