0009 注册登录(第二步:获取短信接口access token)
1 在GeneralTools目录下创建一个常量文件Constants.py
获取短信验证之前需要申请腾讯云短信服务。
"""
腾讯云短信相关常量
"""
# 云短信应用 SDK AppID
SMS_SDK_APP_ID = ''
# 云短信应用 SDK AppKey
SMS_APP_KEY = ''
# 注册短信模板ID
SMS_REGISTER_TEMPLATE_ID = # 输入模板编号
# 短信签名,签名参数使用的是`签名内容`,而不是`签名ID`。
SMS_SIGN = ''
# 验证access_token有效时间: s
VERIFY_ACCESS_TOKEN_EXPIRES = 300
# 短信验证码的有效期,单位秒
SMS_CODE_REDIS_EXPIRES = 300
# 短信验证码发送间隔,单位秒
SEND_SMS_CODE_INTERVAL = 60
2 GeneralTools目录下创建文件CustomSchema.py
在接口文档中,需要对GET参数进行备注。如图:

此时,需要编写一个公共类,用于在每个视图中增加备注。内容如下:
from rest_framework.schemas import AutoSchema
class CustomSchema(AutoSchema):
"""
自定义AutoSchema,为view手动添加注释
"""
def get_manual_fields(self, path, method):
"""
location有下列可选选项可以选:
path 包含在模板化URI中。例如,url值/products/{product_code}/可以与"path"字段一起使用。
query 包含在URL查询参数中。例如?search=sale。通常用于GET请求。
form 包含在请求正文中,作为JSON对象或HTML表单的单个项目。例如{"colour": "blue", ...}。通常的POST,PUT和PATCH请求。"form"单个链接上可以包含多个字段。
header 包含在请求头中,可以自定义。
{
'get': [
coreapi.Field(name="mobile", required=True, location="path", schema=coreschema.String(description='手机号')),
coreapi.Field(name="name", required=True, location="query", schema=coreschema.String(description='用户名')),
coreapi.Field(name="password", required=True, location="query", schema=coreschema.String(description='密码')),
],
'post': [
coreapi.Field(name="mobile", required=True, location="path", schema=coreschema.String(description='手机号')),
coreapi.Field(name="subject", required=True, location="query", schema=coreschema.String(description='邮件主题')),
coreapi.Field(name="message", required=True, location="query", schema=coreschema.String(description='邮件正文')),
coreapi.Field(name="to_email", required=True, location="query", schema=coreschema.String(description='收件人')),
],
}
"""
# 可能是list,也可能是dict
manual_fields = super(CustomSchema, self).get_manual_fields(path, method)
if type(manual_fields) == list:
return manual_fields
else:
# dict
for k, v in self._manual_fields.items():
if method.lower() == k.lower():
return v
else:
return []
使用方法则是在调用的类中,最前面做声明,声明格式如下:
schema = CustomSchema(
manual_fields={
'get': [
Field(name="mobile", required=True, location="query", schema=String(description='手机号')),
],
}
)
3 在GeneralTools下创建一个用于正则表达式验证的公共方法,名为:Verifications.py 在其中增加一个手机验证方法。
import re
def mobileVerify(mobile):
if re.match(r'^1[3-9]\d{9}$', mobile):
return True
return False
4 在APP下views目录下创建Register.py文件,内容如下:
from rest_framework.views import APIView
import logging
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSSerializer
from django.conf import settings
from rest_framework.response import Response
from rest_framework import status
from coreapi import Field
from coreschema import String
from GeneralTools.CustomSchema import CustomSchema
from GeneralTools import Constants
from GeneralTools import Verifications
logger = logging.getLogger('tongheng2')
class GetRegisterToken(APIView):
"""
用户注册第一步:获取短信接口access token
"""
schema = CustomSchema(
manual_fields={
'get': [
Field(name="mobile", required=True, location="query", schema=String(description='手机号')),
],
}
)
@classmethod
def get(cls, request):
"""
【功能描述】用户注册第一步:获取短信接口access token </br>
【返回值】返回短信接口access token </br>
"""
mobile = request.query_params.get('mobile')
if not mobile:
return Response(data={'message': '缺少mobile参数'}, status=status.HTTP_400_BAD_REQUEST)
if not Verifications.mobileVerify(mobile):
return Response(data={'message': '不是有效的有机号'}, status=status.HTTP_400_BAD_REQUEST)
# 创建itsdangerous模型的转换工具
tjwserializer = TJWSSerializer(settings.SECRET_KEY, Constants.VERIFY_ACCESS_TOKEN_EXPIRES)
access_token = tjwserializer.dumps({'mobile': mobile}) # bytes
access_token = access_token.decode() # str
data = {
'mobile': mobile,
'access_token': access_token
}
return Response(data=data, status=status.HTTP_200_OK)
5 配置Organization urls
from django.urls import path
from .views import Register
urlpatterns = [
path('GetRegisterToken/', Register.GetRegisterToken.as_view()),
]
6 运行工程,进入接口文档,可以看到以下效果

7 点击Interact,即可进行接口测试,即输入手机号,获取获取短信接口access token

0009 注册登录(第二步:获取短信接口access token)的更多相关文章
- Flask实战第42天:注册页面对接短信接口及接口加密
我们来看下之前写的 sms_captcha函数 @bp.route('/sms_captcha/') def sms_captcha(): params = {'code':'abcd'} resul ...
- python+pymssql+selenium 获取短信验证码登录(实战练习)
登录页面输入手机号, 获取短信验证码(验证码有10分钟有效期) 1 连接sql server数据库,获取10分钟之内的有效短信验证码 2 页面输入手机号,并获取验证码.若存在有效验证码则输入验证码,若 ...
- 重构客户注册-基于ActiveMQ实现短信验证码生产者
重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...
- 浏览器端获取短信验证码java实现——阿里云短信服务
需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...
- 转载:Android自动化测试- 自动获取短信验证码
前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android ...
- android自动获取短信验证码
前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码.主要就是实时获取短信信息.android上获 ...
- 短信接口调用以及ajax发送短信接口实现以及前端样式
我们短信api用的是云信使平台提供的非免费短信服务:官网提供的demo有两种,分别是function加其调用.class文件加其调用. 在这里我们用class文件加调用: 首先,ThinkPHP里面自 ...
- Thinkphp框架 -- 短信接口验证码
我用的是一款名叫 短信宝 的应用,新注册的用户可以免费3条测试短信,发现一个BUG,同个手机可以无限注册,自己玩玩还是可以的. 里面的短信接口代码什么信息都没有,感觉看得不是很明白,自己测试了一遍,可 ...
随机推荐
- 回炉重造之重读Windows核心编程-006-线程
线程也是有两部分组成的: 线程的内核对象,操作系统用来管理线程和统计线程信息的地方. 线程堆栈,用于维护现场在执行代码的时候用到的所有函数参数和局部变量. 进程是线程的容器,如果进程中有一个以上的线程 ...
- opencv —— HoughLines、HoughLinesP 霍夫线变换原理(标准霍夫线变换、多尺度霍夫线变换、累积概率霍夫线变换)及直线检测
霍夫线变换的原理 一条直线在图像二维空间可由两个变量表示,有以下两种情况: ① 在笛卡尔坐标系中:可由参数斜率和截距(k,b)表示. ② 在极坐标系中:可由参数极经和极角(r,θ)表示. 对于霍夫线变 ...
- Node.js文档-path
用于处理文件路径和目录路径 引入 const path = require('path') path.extname(path) 返回扩展名.从最后一次出现 . 字符到字符串结束. const pat ...
- 想在don‘t starve中活的更久?那饥荒海难攻略你怎么能不知道!
饥荒海难mac版是一款非常好玩的烧脑游戏.玩家将扮演一个勇敢的绅士科学家威尔逊,被一个恶魔困住并送到一个神秘的荒野世界,玩家必须利用异世界中的自然资源让自己存活下去,并且抵御各种异世界生物的威胁.想在 ...
- c#画图之折线图
public JsonResult DrawLineChart() { // 预置颜色 List<Color> colors = new List<Color>() { Col ...
- mysql-主从备份问题小结
一:防火墙 常用命令 firewall-cmd --state 或 systemctl status firewalld # 查看状态 systemctl start firewalld# 启动 sy ...
- 网站SEO中服务器优化的三个问题
网站做好之后,站长第一件事就是想到去做SEO,但是有一些网站在做优化的时候,出现一些奇怪的情况,比如说优化已经不错的网站,排名突然就掉下来了:还有一些网站各项优化工作都是非常认真,但是排名却一直不上来 ...
- 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积
纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...
- c#中for与foreach的使用
for循环示例: static void Main(string[] args) { string[] s = new string[] { "a,b,c,d,e,f,g" }; ...
- 今日份Java
package util; import java.sql.*; public class DBUtil { static String url = "jdbc:mysql://localh ...