django项目gitee仓库地址:https://gitee.com/YANGYUE0205/meiduo_project.git

一, 总体逻辑分析

要点:
1.为了避免用户使用图形验证码恶意测试,我们提取了图形验证码后,立即删除Redis中的图形验证码。
2.保存短信验证码是为注册做准备的。
3.Django不具备发送短信的功能,所以我们借助第三方的容联云通讯短信平台来帮助我们发送短信验证码。

二,容联云平台的注册登录和使用
容联云官网:官网 https://www.yuntongxun.com/

  1. 注册

  2. 登录

  3. 重要信息(三个,等会有用)。

  4. 创建应用。

    5.申请上线。

    6.进行认证。
    (需要公司信息)

    7.认证成功。

    8.添加测试号码。

    9.设置短信模板


    10,容联云通讯短信SDK测试
    10.1,模板短信SDK下载
    https://www.yuntongxun.com/doc/ready/demo/1_4_1_2.html
    10.2,模板短信SDK使用说明
    http://doc.yuntongxun.com/p/5a533e0c3b8496dd00dce08c
    10.3,集成模板短信SDK
    CCPRestSDK.py:由容联云通讯开发者编写的官方SDK文件,包括发送模板短信的方法
    ccp_sms.py:调用发送模板短信的方法

    10.4,模板短信SDK测试
    ccp_sms.py文件中

# -*- coding:utf-8 -*-from libs.yuntongxun.CCPRestSDK import REST# 说明:主账号,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID
_accountSid = '8aaf070862181ad5016236f3bcc811d5'# 说明:主账号Token,登陆云通讯网站后,可在控制台-应用中看到开发者主账号AUTH TOKEN
_accountToken = '4e831592bd464663b0de944df13f16ef'# 请使用管理控制台首页的APPID或自己创建应用的APPID
_appId = '8aaf070868747811016883f12ef3062c'# 说明:请求地址,生产环境配置成app.cloopen.com
_serverIP = 'sandboxapp.cloopen.com'# 说明:请求端口 ,生产环境为8883
_serverPort = "8883"# 说明:REST API版本号保持不变
_softVersion = '2013-12-26'# 云通讯官方提供的发送短信代码实例
# 发送模板短信
# @param to 手机号码
# @param datas 内容数据 格式为数组 例如:{'12','34'},如不需替换请填 ''
# @param $tempId 模板Id
def sendTemplateSMS(to, datas, tempId):# 初始化REST SDKrest = REST(_serverIP, _serverPort, _softVersion)rest.setAccount(_accountSid, _accountToken)rest.setAppId(_appId)result = rest.sendTemplateSMS(to, datas, tempId)print(result)for k, v in result.items():if k == 'templateSMS':for k, s in v.items():print('%s:%s' % (k, s))else:print('%s:%s' % (k, v))if __name__ == '__main__':# 注意: 测试的短信模板编号为1sendTemplateSMS('18310820688', ['123456', 5], 1)

10.5, 模板短信SDK返回结果说明

{'statusCode': '000000', // 状态码。'000000'表示成功,反之,失败'templateSMS': {'smsMessageSid': 'b5768b09e5bc4a369ed35c444c13a1eb', // 短信唯一标识符'dateCreated': '20190125185207' // 短信发送时间}
}

11, 封装发送短信单例类
11.1 ,封装发送短信单例类

class CCP(object):"""发送短信的单例类"""def __new__(cls, *args, **kwargs):# 判断是否存在类属性_instance,_instance是类CCP的唯一对象,即单例if not hasattr(CCP, "_instance"):cls._instance = super(CCP, cls).__new__(cls, *args, **kwargs)cls._instance.rest = REST(_serverIP, _serverPort, _softVersion)cls._instance.rest.setAccount(_accountSid, _accountToken)cls._instance.rest.setAppId(_appId)return cls._instance

11.2, 封装发送短信单例方法

def send_template_sms(self, to, datas, temp_id):"""发送模板短信单例方法:param to: 注册手机号:param datas: 模板短信内容数据,格式为列表,例如:['123456', 5],如不需替换请填 '':param temp_id: 模板编号,默认免费提供id为1的模板:return: 发短信结果"""result = self.rest.sendTemplateSMS(to, datas, temp_id)if result.get("statusCode") == "000000":# 返回0,表示发送短信成功return 0else:# 返回-1,表示发送失败return -1

11.3, 测试单例类发送模板短信结果

if __name__ == '__main__':# 注意: 测试的短信模板编号为1CCP().send_template_sms('18310820688', ['123456', 5], 1)

三,短信验证码后端接口设计

  1. 短信验证码后端接口设计
    请求方式
    2.请求参数

    4.短信验证码后端接口定义。
class SMSCodeView(View):"""短信验证码"""def get(self, reqeust, mobile):""":param reqeust: 请求对象:param mobile: 手机号:return: JSON"""pass

5.短信验证码后端逻辑实现

from libs.yuntongxun.sms import CCP
from django import http
import random
import logging
logger = logging.getLogger('django')class SMSCodeView(View):"""短信验证码"""def get(self, reqeust, mobile):""":param reqeust: 请求对象:param mobile: 手机号:return: JSON"""# 接收参数image_code_client = reqeust.GET.get('image_code')uuid = reqeust.GET.get('image_code_id')# 校验参数if not all([image_code_client, uuid]):return http.JsonResponse({'code': 400, 'errmsg': '缺少必传参数'})# 创建连接到redis的对象redis_conn = get_redis_connection('code')# 提取图形验证码image_code_server = redis_conn.get('img_%s' % uuid)if image_code_server is None:# 图形验证码过期或者不存在return http.JsonResponse({'code': 400, 'errmsg': '图形验证码失效'})# 删除图形验证码,避免恶意测试图形验证码try:redis_conn.delete('img_%s' % uuid)except Exception as e:logger.error(e)# 对比图形验证码image_code_server = image_code_server.decode()  # bytes转字符串if image_code_client.lower() != image_code_server.lower():  # 转小写后比较return http.JsonResponse({'code': 400, 'errmsg': '输入图形验证码有误'})# 生成短信验证码:生成6位数验证码sms_code = '%06d' % random.randint(0, 999999)logger.info(sms_code)# 保存短信验证码redis_conn.setex('sms_%s' % mobile, 300, sms_code)# 发送短信验证码CCP().send_template_sms(mobile,[sms_code, 5], 1)# 响应结果return http.JsonResponse({'code': 0, 'errmsg': '发送短信成功'})

Django项目后端实现注册功能---短信验证码(容联云)。相关推荐

  1. python短信验证码 容联云

    短信文档 官网 https://www.yuntongxun.com/ 注册 绑定手机号 编写view from django.test import TestCase# Create your te ...

  2. python发短信(容联云)

    python容联云发短信验证码 根据容联云的接口说明配置Django+Redis全套视频教程(含项目实战)_达内Python进阶教学视频--学习笔记 import datetime import ha ...

  3. 注册刷短信验证码的问题

    2019独角兽企业重金招聘Python工程师标准>>> 由于目前的项目是比较老旧的PHP代码,而且没有用到开放的一些PHP开发框架,全都是最基础的代码码起来的. 最近遇到有在刷注册的 ...

  4. 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战

    商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 文章目录 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 第八章 账号微服务注册模块+短信验 ...

  5. 网站app注册登录短信验证码是怎么获取实现的

    在我们的生活中,经常会遇到(www.yunxintong100.com)需要手机注册,手机验证,手机修改密码的时候,而这些操作都会收到手机验证码来进行身份验证,这样做的目的不仅是为了保护用户的安全使用 ...

  6. 网站注册获取短信验证码步骤

    目前短信验证码的应用可以说是相当的广泛,不仅避免了大量重复注册.烂数据,提高了企业工作效率,而且在操作上也相当简单,只需要在企业现有的网站上进行短信接口对接,就可以实现短信验证码的发送. 网站注册获取 ...

  7. android 极光 环信,环信、容联云通讯、极光推送和网易云信IM即时通讯功能接入方式_部署方式_企业服务汇...

    编者按:企业在挑选IM即时通讯功能服务商时,对于企业应当如何接入其IM功能.接入方式和部署方式有哪些等问题不太清楚.今天企业服务汇通过评测环信.容联云通讯.极光推送和网易云信这四家服务商来为你详细说明 ...

  8. 海量数据大课学习笔记(8)-账号微服务注册模块+短信验证码+阿里云OSS开发实战-小滴课堂

    文章目录 前言 第1集 账号微服务注册功能和流程介绍 第2集 第三方短信验证码平台接入申请操作指引 第3集 账号微服务短信验证码发送工具类封装实战 第4集 账号微服务短信验证码发送工具类单元测试 前言 ...

  9. SSH2框架实现注册发短信验证码实例

    [原文连接]https://blog.csdn.net/u010539352/article/details/46858189 这两天开始敲代码了,让用SSH2框架,以前没有接触过Java项目更没有接 ...

最新文章

  1. linux系统yum源,Linux开启安装EPEL YUM源
  2. 给网站配置免费的HTTS证书 1
  3. 响应信息不明确的接口做关联
  4. 3.Android 优化布局(解决TextView布局)
  5. 使用Github Action发布函数到阿里云serverless平台
  6. 没有外层实列可以访问_这糕点外层香酥,内馅香甜可口,让人吃一次就爱上了,做起来...
  7. 晋升新一线的合肥,跨平台的.NET氛围究竟如何?
  8. Feature Engineering 特征工程 4. Feature Selection
  9. “两小学生研究喝茶抗癌获奖”,官方回应:经老师培训独立完成
  10. com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)
  11. RecognizerIntent(语音识别)
  12. mysql双机热备的配置步骤
  13. php自学好还是培训,转行php选择自学还是培训
  14. Arduion 底层原理之 Uart函数 串口收发 串口协议解析
  15. Java常用实现八种排序算法与代码实现
  16. 如何生成唯一的Android设备ID?
  17. 如何在Java项目中定义并调用自己编写的native方法?
  18. [我参加NVIDIA Sky Hackathon](模型训练ssd系列)
  19. 微信小程序-腾讯云即时通信 IM 小程序直播(一)
  20. 《信息安全工程师教程》学习笔记01(第一章)

热门文章

  1. linux 打开大文件命令,linux下大文件的读取
  2. rt thread studio使用QBOOT和片外flash实现OTA升级
  3. 《互联网金融投资理财一册通》一一1.1 互联网金融
  4. Debian 9.x 系统安装 Proxmox VE (笔记)
  5. mac设置应用来自任何来源
  6. WIFI模块透传基础试验-AP toSTR
  7. 逐梦offer -- JVM篇
  8. 《Effective C++》学习笔记(条款25:考虑写出一个不抛异常的swap函数)
  9. 查询快递中,快递公司数据信息的问题
  10. C++:实现量化covariance协方差矩阵测试实例