短信验证码接口

后台

urls.py
path('sms/', views.SMSViewSet.as_view({'get': 'send'})),
throttles.py
from rest_framework.throttling import SimpleRateThrottle
from django.core.cache import cache
from django.conf import settings
# 结合手机验证码接口来书写
class SMSRateThrottle(SimpleRateThrottle):scope = 'sms'def get_cache_key(self, request, view):# 手机号是通过get请求提交的mobile = request.query_params.get('mobile', None)if not mobile:return None  # 不限制# 手机验证码发送失败,不限制,只有发送成功才限制,如果需求是发送失败也做频率限制,就注释下方三行code = cache.get(settings.SMS_CACHE_KEY % {'mobile': mobile})if not code:return Nonereturn self.cache_format % {'scope': self.scope,'ident': mobile,}
const.py
# 短信验证码缓存key
SMS_CACHE_KEY = 'sms_cache_%(mobile)s'# 短信验证码缓存时间s
SMS_CACHE_TIME = 300
dev.py
REST_FRAMEWORK = {'EXCEPTION_HANDLER': 'utils.exception.exception_handler','DEFAULT_THROTTLE_RATES': {'sms': '1/min'}
}
views.py
from libs import tx_sms
from django.core.cache import cache
from django.conf import settings
from .throttles import SMSRateThrottle
class SMSViewSet(ViewSet):# 设置频率限制,一个手机号一分钟只能访问一次throttle_classes = [SMSRateThrottle]def send(self, request, *args, **kwargs):# return APIResponse(result=False)# 1)接收前台手机号验证手机格式mobile = request.query_params.get('mobile', None)if not mobile:return APIResponse(1, 'mobile field required')if not re.match(r'^1[3-9][0-9]{9}$', mobile):return APIResponse(1, 'mobile field error')# 2)后台产生短信验证码code = tx_sms.get_code()# 3)把验证码交给第三方,发送短信result = tx_sms.send_code(mobile, code, settings.SMS_CACHE_TIME // 60)# 4)如果短信发送成功,服务器缓存验证码(内存数据库),方便下一次校验if result:cache.set(settings.SMS_CACHE_KEY % {'mobile': mobile}, code, settings.SMS_CACHE_TIME)# 5)响应前台短信是否发生成功return APIResponse(result=result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考复习之UML设计篇

UML统一建模语言 构件图:描述系统的物理结构,它可以用来显示程序代码如何分解成模块 部署图:描述系统中硬件和软件的物理结构,它描述构成系统架构的软件构件,处理器和设备 用例图:描述系统与外部系统及用…

python使用回溯算法解决括号组合问题

对于给定k为括号的总对数,需要将能够组合的所有有效括号组合方式求出的问题。 对于回溯算法是将解空间看做一定的结构,通常是作为树形结构或者图形结构,回溯算法实际上是一种类似枚举的探索尝试过程,主要是在探索尝试过程中寻找解…

R语言【taxa】——as_data_frame():将 taxa 的对象 转换为 data.frame

Package taxa version 0.4.2 Description 将 taxa 对象包含的信息转换为 data.frame,信息保存在列中。如果使用 as_tribble 则转换为表格。 Usage as_data_frame(x,row.names NULL,optional FALSE,...,stringsAsFactors FALSE ) Arguments 参数【x】&#xff1…

c++:类和对象(5),运算符重载

目录 运算符重载概念&#xff1a; 运算符重载 1.成员函数重载号 2.全局函数重载号 打印结果&#xff1a; <<运算符重载 递增运算符重载 简单例子 输出结果为&#xff1a; 赋值运算符重载 如何重载 输出结果为&#xff1a; 什么时候重载 关系运算符重载 简单例…

springboot121编程训练系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的编程训练系统设计与实现 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四…

一文深度解读多模态大模型视频检索技术的实现与使用

当视频检索叠上大模型Buff。 万乐乐&#xff5c;技术作者 视频检索&#xff0c;俗称“找片儿”&#xff0c;即通过输入一段文本&#xff0c;找出最符合该文本描述的视频。 随着视频社会化趋势以及各类视频平台的快速兴起与发展&#xff0c;「视频检索」越来越成为用户和视频平…

SpringBoot 自定义Filter 提前返回 CORS 错误 处理前后端分离跨域配置无效问题解析

前言 浏览器有跨域限制&#xff0c;非同源策略 (协议、主机名或端口不同) 被视为跨域请求&#xff0c;解决跨域有跨域资源共享(CORS)、反向代理和 JSONP的方式。本篇通过 SpringBoot 的资源共享配置 (CORS) 来解决前后端分离项目的跨域&#xff0c;以及从原理上去解决跨域配置…

负载均衡流程

1、负载均衡流程图 2、触发负载均衡函数trigger_load_balance void trigger_load_balance(struct rq *rq) { /* Dont need to rebalance while attached to NULL domain */ if (unlikely(on_null_domain(rq)))//当前调度队列中的调度域是空的则返回 return; i…

【嵌入式学习】C++QT-Day1-C++基础

思维导图&&笔记 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream&…

[MRCTF2020]Ez_bypass1

代码审计&#xff0c;要求gg和id的MD5值相等而gg和id的值不等或类型不等 相同MD5值的不同字符串_md5相同的不同字符串-CSDN博客 不过这道题好像只能用数组 下一步是passwd不能是纯数字&#xff0c;但是下一个判断又要passwd等于1234567 这里通过passwd1234567a实现绕过 原…

二叉树自顶向下递归和自底向上递归

二叉树自顶向下递归 自顶向下&#xff08;top-down&#xff09; 和前序遍历紧密关联&#xff08;根->左->右&#xff09;当前节点的情况依赖于其父节点的情况考虑完父节点&#xff0c;再考虑当前节点 LeetCode 104. 二叉树的最大深度 class Solution {int ans;public…

数据库学习命令总结(持续更新)

单行注释&#xff1a;以#或--进行单行注释 多行注释&#xff1a;使/* 注释内容 */进行多行注释 使用--时须在最后一个-后添加至少一个控制字符&#xff08;如空格、制表符、换行符等&#xff09;防止注释--与减法运算的混淆 1、DDL数据定义语言 1.1数据库操作 1、创建数据库…

3D点云数据的标定,从搭建环境到点云标定方法及过程,只要有一台Windows笔记本,让你学会点云标定

ptscloudpre: 点云标定准备&#xff1a; 说明&#xff1a; 如下介绍适用windows系统的电脑。apple笔记本同理&#xff0c;但是需要安装MAC版本的anaconda。网址&#xff1a;Free Download | Anaconda可下载对应MAC版本的Anaconda的安装包建议下载2022年或2021年的安装包安装。…

ModuleNotFoundError No module named ‘bs4‘ 问题处理

ModuleNotFoundError: No module named ‘bs4’ 问题处理 在使用Postgres数据库时&#xff0c;因为SQL脚本中使用到了xml_killer函数&#xff0c;导致直接报错&#xff1a; org.postgresql.util.PSQLException: ERROR: ModuleNotFoundError: No module named ‘bs4’ 后来在…

Java中的Service

七. Service 1. 数据与逻辑分离 之前我们讲面向对象设计&#xff0c;都是把数据和逻辑放在一起&#xff0c;这是理想情况。 现实情况是&#xff0c;把对象分为两类&#xff0c;一类专门存数据&#xff0c;一类专门执行逻辑 存数据的就是一个 Java Bean 存逻辑的叫做 XxxSe…

CentOS 7安装Mysql+Mycat

安装MySQL yum源 yum localinstall http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm修改源 vi /etc/yum.repos.d/mysql-community.repo [mysql-connectors-community] nameMySQL Connectors Community baseurlhttp://repo.mysql.com/yum/mysql-connectors…

qml中访问控件内部的子项

如何访问Repeater类型内部的子项、Row等布局类型内部的子项以及ListView内部的子项等。。。 1、测试代码 import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.3 import QtQml 2.12Window {id: windowobjectName: "m…

vue-drag-resize-rotate 拖拉拽旋转

中文在线演示地址 1.安装 npm install gausszhou/vue-drag-resize-rotate 2.使用 <template><div class"container"><vue-drag-resize-rotate:w"200":h"200":x"0":y"0":parent"true":draggab…

数据库四种隔离级别

未提交读&#xff08;脏读&#xff09;ru&#xff0c;在事务b中执行了某些操作&#xff0c;比如添加或者修改&#xff0c;这时候事务a可以读取到事务b这个事务还没提交之前的这些操作的结果&#xff0c;其结果被称为脏读。提交读 rc&#xff0c;事务b执行了一些操作并提交&…

基于Python Django的大数据招聘数据分析系统,包括数据大屏和后台管理

基于Python Django的大数据招聘数据分析系统是一个综合利用大数据技术和数据可视化技术的招聘行业解决方案。该系统旨在帮助企业和招聘机构更好地理解和分析招聘市场的趋势和变化&#xff0c;从而提高招聘效率和质量。 首先&#xff0c;该系统提供了一个强大的后台管理功能&am…