腾讯云短信
由于项目在注册、登录、找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做。
为什么要用腾讯云短信呢? 因为注册就送 100条免费短信 的额度。哈哈哈哈,发短信的功能你就不用花钱了。
1.注册腾讯云 & 开通云短信
1.1 注册并认证
注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器、云存储你、云直播、云短信等很多功能。
注册地址:https://cloud.tencent.com/
根据提示一步步进行注册即可,例如:
实名注册时,什么行业、通讯等信息,按照自己的的实际情况填写即可,实在不知道的可以随便填。
1.2 开通云短信
腾讯云注册成功之后,登录腾讯云并去开通 云短信服务,开通短信服务后才能发短信。
开通地址:https://console.cloud.tencent.com/smsv2
根据流程进行开通之后,就可以进入云短信控制台。
2. 创建应用
创建应用并将应用中生成的 SDK AppID
和 App Key
复制下来,之后通过python发送短信时需要用到。
3. 创建签名
在腾讯云短信签名时需要认证,认证需要填写签名类型:网站、APP、小程序、公众号,前三种需要提供企业资质等复杂的东西,个人公众号认证会比较便捷,所以推荐个人开发的话使用 公众号 进行签名。
so,咱们需要先 申请一个公众号
然后 创建签名
。
3.1 申请微信订阅号
注册地址:https://mp.weixin.qq.com/
3.2 创建签名
根据自己的需求选择 国内短信/国际短信 中的签名管理,进行创建签名。
切记:签名类型选择 公众号 ,并根据提示上传相关数据即可。
签名创建并审核通过后,把你提交的 签名内容
值保存下来,之后Python发送短信用。
提醒:签名创建完成之后,需要等待腾讯进行审核,也可以联系他们客服QQ加速审核。
4. 创建模板
根据自己需求创建短信模板,以后根据模板进行发送短信,例如:您的注册验证码:{1},如非本人操作,请忽略本短信!
模板创建并审核通过之后,把 模板ID
保存下来,之后Python发送短信用。
5. 发送短信
上述的准备工作做完中我们开通相关服务并获取到如下几个值:
-
创建应用,获取到
appid
和appkey
-
创建签名,获取
签名内容
-
创建模板,获取
模板ID
接下来开始使用Python发送短信。
第一步:安装SDK
pip install qcloudsms_py
第二步:基于SDK发送短信

#!/usr/bin/env python # -*- coding:utf-8 -*- import ssl # ssl._create_default_https_context = ssl._create_unverified_context from qcloudsms_py import SmsMultiSender, SmsSingleSender from qcloudsms_py.httpclient import HTTPError def send_sms_single(phone_num, template_id, template_param_list): """ 单条发送短信 :param phone_num: 手机号 :param template_id: 腾讯云短信模板ID :param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板 :return: """ appid = 112142311 # 自己应用ID appkey = "8cc5b87123y423423412387930004" # 自己应用Key sms_sign = "Python之路" # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称) sender = SmsSingleSender(appid, appkey) try: response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign) except HTTPError as e: response = {'result': 1000, 'errmsg': "网络异常发送失败"} return response def send_sms_multi(phone_num_list, template_id, param_list): """ 批量发送短信 :param phone_num_list:手机号列表 :param template_id:腾讯云短信模板ID :param param_list:短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板 :return: """ appid = 112142311 appkey = "8cc5b87123y423423412387930004" sms_sign = "Python之路" sender = SmsMultiSender(appid, appkey) try: response = sender.send_with_param(86, phone_num_list, template_id, param_list, sign=sms_sign) except HTTPError as e: response = {'result': 1000, 'errmsg': "网络异常发送失败"} return response if __name__ == '__main__': result1 = send_sms_single("15131255089", 548760, [666, ]) print(result1) result2 = send_sms_single( ["15131255089", "15131255089", "15131255089", ],548760, [999, ]) print(result2)
6. 关于频率限制
腾讯云短信后台可以进行 短信频率 的限制。
但是,由于我们是免费用户所以无法进行设置,只能使用默认的配置(30秒发1条/1小时发5条/1天发10条)。
相信大家曾经都有过这样的经历:注册某个网站时,通过点击获取短信验证码,而验证码会一般会有60秒的超时时间限制,即:60s之后短信验证码失效,需重新获取验证码。
刚才说的短信验证码失效的事 和 今天的话题redis有什么关系呢?
redis是一个软件,他恰好提供了一个可以设置值并允许设定超时时间的功能,例如:
例如:我在redis中设置一个 键 值 并指定超时时间为 10 秒,简化之后可以这样实现
conn.set("15131255089",9871,10)
,之后还可以根据 键 再可以去获取对应的值value = conn.get("15131255089")
,如果已超时则获取的值为空。
so,今天要给大家先聊聊redis,这样以后在项目中我们就可以用上他了。
声明:redis中要学的知识点非常多,而这些redis专项内容会在咱们之后的Linux架构的课程中详细讲解,本节主要以“短信超时”功能为目的来讲解。
1. 什么是redis?
官方:Redis是一个使用 C语言 编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
白话:Redis是一个软件,这个软件可以帮助我们维护一部分内存,让我们往那块内存中进行存取值。如果数据在内存中存储,遇到宕机那么数据就会丢失,而redis解决了这个问题,他可以将内存中的数据以某种策略存储到硬盘,以保证宕机数据不丢失。
Redis和MySQL数据库的比较?
redis,直接在内存中进行存取数据,速度非常快;由于在内存,所以存储的数据不能太多,内存一般8G/16G;对数据可以设置自动超时时间;
mysql,通过SQL语句操作的数据都在硬盘上,速度相对慢;由于存储在硬盘,所以存储的数据可以非常多,硬盘一般500G/1T;数据不能自动超时,想超时需要自定写SQL处理;
2. 安装redis
由于目前同学们还未接触过 Linux 操作系统,所以大家可以先安装到windows系统上来进行学习。
注意:以后在工作中使用到redis时,都是需要安装在Linux操作系统上,咱们后期Linux架构课程会单独讲解Linux并带着大家手把手搭建redis和高可用及集群等。
2.1 下载redis
选择最新稳定版安装,地址:https://github.com/microsoftarchive/redis/releases
提醒:截止目前redis稳定版本已到 5.0 ,由于windows实际应用不多,所以版本就比较滞后。
2.2 安装redis
找到已下载好的安装包,根据下图的提示按步骤点击执行即可。
最后点击next就开始安装,直至安装成功,成功之后所有redis相关安装的窗口都会自动关闭。
2.3 修改配置
redis这个软件安装上之后,需要对他进行一些基本设置,以便于我们以后可以通过python代码来对redis中的数据进行操作。
-
打开配置文件,redis安装的目录下的
redis.windows-service.conf
文件 -
修改配置
-
设置绑定IP,如果想要让局域网内其他主机访问自己的redis,需要设置
bind 0.0.0.0
-
设置redis密码,如果想需要提供密码再登录redis,需要设置
requirepass 密码
-
2.4 启动redis
安装和配置完成之后,需要启动redis。
-
打开电脑的【控制面板】,然后选择【管理工具】,在选择【服务】
-
启动 或 关闭,在右边找到并选中redis服务,然后点击 重启动 或 关闭
3. redis-cli连接redis
redis安装并启动之后,就可以通过各种客户端连接redis并做各种操作。
redis-cli是安装上redis之后自带的客户端工具,他可以让我们快速通过命令对redis操作。
在windows中打开终端,输入 redis-cli 就可以使用这个客户端了。例如:
4. python连接redis
python代码也可以实现连接redis并对redis中进行各种操作。python代码想要操作redis必须先安装相关模块。
提示:在安装redis的主机上执行 ipconfig 获取redis的IP(windows系统)
第一步:安装python操作redis模块
pip3 install redis
第二步:写代码去操作redis

#!/usr/bin/env python # -*- coding:utf-8 -*- import redis # 直接连接redis conn = redis.Redis(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8') # 设置键值:15131255089="9999" 且超时时间为10秒(值写入到redis时会自动转字符串) conn.set('15131255089', 9999, ex=10) # 根据键获取值:如果存在获取值(获取到的是字节类型);不存在则返回None value = conn.get('15131255089') print(value)
上面python操作redis的示例是以直接创建连接的方式实现,每次操作redis如果都重新连接一次效率会比较低,建议使用redis连接池来替换,例如:

import redis # 创建redis连接池(默认连接池最大连接数 2**31=2147483648) pool = redis.ConnectionPool(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8', max_connections=1000) # 去连接池中获取一个连接 conn = redis.Redis(connection_pool=pool) # 设置键值:15131255089="9999" 且超时时间为10秒(值写入到redis时会自动转字符串) conn.set('name', "武沛齐", ex=10) # 根据键获取值:如果存在获取值(获取到的是字节类型);不存在则返回None value = conn.get('name') print(value)
5. django连接redis
按理说搞定上一步python代码操作redis之后,在django中应用只需要把上面的代码写到django就可以了。
例如:django的视图函数中操作redis

import redis from django.shortcuts import HttpResponse # 创建redis连接池 POOL = redis.ConnectionPool(host='10.211.55.28', port=6379, password='foobared', encoding='utf-8', max_connections=1000) def index(request): # 去连接池中获取一个连接 conn = redis.Redis(connection_pool=POOL) conn.set('name', "武沛齐", ex=10) value = conn.get('name') print(value) return HttpResponse("ok")
上述可以实现在django中操作redis。但是,这种形式有点非主流,因为在django中一般不这么干,而是用另一种更加简便的的方式。
第一步:安装django-redis模块(内部依赖redis模块)
pip3 install django-redis
第二步:在django项目的settings.py中添加相关配置

# 上面是django项目settings中的其他配置.... CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.28:6379", # 安装redis的主机的 IP 和 端口 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": { "max_connections": 1000, "encoding": 'utf-8' }, "PASSWORD": "foobared" # redis密码 } } }
第三步:在django的视图中操作redis

from django.shortcuts import HttpResponse from django_redis import get_redis_connection def index(request): # 去连接池中获取一个连接 conn = get_redis_connection("default") conn.set('nickname', "武沛齐", ex=10) value = conn.get('nickname') print(value) return HttpResponse("OK")
写在最后
至此,就是本节的所有内容,大家可以在django中通过redis进行存取值,在后续的项目开发中可以用他来完成短信验证码过期的功能。
以后关于redis还会讲很多其他高级的知识点,参见:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-08-04 Paramiko模块
2020-08-04 使用Navicat生成ER关系图并导出&&查看mysql数据库日志
2020-08-04 荣耀线下门店详情信息爬取
2020-08-04 中国空气质量在线监测平台加密数据爬取