项目开发git-短信验证-redis数据库
项目开发git操作
基本流程
""" 1、开发前,拉一次远程仓库 2、工作区进行开发 3、将开发结果提交到本地版本库 - git status查看时没有待处理的事件 4、拉取远程仓库(每一次要提交远程仓库前必须先拉) 5、如果出现冲突,线下沟通(协商重新开发冲突文件),要重新走3、4步 6、没有冲突,提交到远程仓库 """
拉取代码,克隆下载到本地
协同开发
""" 1)所有人在一个分支上进行开发 - 通常开发分支名为dev 2)遵循git开发流程:先提交本地版本库,再拉取服务器代码,最后提交代码 提交本地版本库:git commit -m '版本信息' 拉取服务器代码:git pull 源名 分支名 提交代码:git push 源名 分支名 """
冲突解决
""" 1)打开冲突文件 2)定位到冲突位置: >>>>>冲突开始 自身代码 ==== 冲突代码 <<<<<<版本号 3)删除冲突提示信息:>>>>>冲突开始、====、<<<<<<版本号 4)线下沟通整合自身代码与冲突代码,形成最终代码结果 5)重新提交本地版本库,再拉取服务器代码,最后提交代码 """
提交不成功时,可以添加更换远程源地址
合并开发
""" eg:将dev分支内容合并到prod分支上 1)切换到prod分支:git checkout prod 2)合并dev分支:git merge dev """
远程合并开发,直接设置即可
pycharm使用git
结合git终端命令结合使用,先给项目创建init库,add.到暂存区,打开pycharm如下操作即可。
执行提交到版本库:
短信验证
开通腾讯云短信
""" 1、官网注册实名账号:https://cloud.tencent.com 2、选取短信服务创建短信应用 3、申请签名与短信模板 - 通过微信公众号申请 """
腾讯云短信服务的使用文档,按文档说明安装模块导入使用即可。
安装模块
pip install qcloudsms_py
主要参数的配置:
准备必要参数
# 短信应用 SDK AppID appid = 1400009099 # SDK AppID 以1400开头 # 短信应用 SDK AppKey appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad" # 需要发送短信的手机号码 phone_numbers = ["21212313123", "12345678902", "12345678903"] # 短信模板ID,需要在短信控制台中申请 template_id = 7839 # NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 需要在短信控制台中申请 # 签名 sms_sign = "腾讯云" # NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台中申请
指定模板 ID 单发短信
from qcloudsms_py import SmsSingleSender from qcloudsms_py.httpclient import HTTPError ssender = SmsSingleSender(appid, appkey) params = ["5678"] # 当模板没有参数时,`params = []` try: result = ssender.send_with_param(86, phone_numbers[0], template_id, params, sign=sms_sign, extend="", ext="") except HTTPError as e: print(e) except Exception as e: print(e) print(result)
腾讯云短信二次封装
根据腾讯云提供的短信模板,修改二次封装并使用。
# 短信应用 SDK AppID - SDK AppID 以1400开头 APP_ID = ... # 短信应用 SDK AppKey APP_KEY = "..." # 短信模板ID,需要在短信控制台中申请 TEMPLATE_ID = ... # 签名 - 是`签名内容`,而不是`签名ID` SMS_SIGN= "..." # 电话前缀 MOBILE_PREFIX = 86
# 通过MacOS ssl安全认证 import ssl ssl._create_default_https_context = ssl._create_unverified_context # 获取验证码的功能 import random def get_code(): code = '' for i in range(4): code += str(random.randint(0, 9)) return code # 短信发送者 from qcloudsms_py import SmsSingleSender from .settings import * sender = SmsSingleSender(APP_ID, APP_KEY) # 发送验证码 from utils.logging import logger def send_sms(mobile, code, exp): try: # 发送短信 response = sender.send_with_param(MOBILE_PREFIX, mobile, TEMPLATE_ID, (code, exp), sign=SMS_SIGN, extend="", ext="") # 成功 if response and response['result'] == 0: return True # 失败 logger.warning('%s - %s' % ('短信发送失败', response['result'])) except Exception as e: # 异常 logger.warning('%s - %s' % ('短信发送失败', e)) return False
libs/txsms/__init__
# 包对外提供的功能方法 from .sms import get_code, send_sms
from libs import txsms code = txsms.get_code() print(code) print(txsms.send_sms('电话', code, 5))
短信发送接口分析
from rest_framework.views import APIView # 发送验证码接口分析 class SMSAPIView(APIView): def post(self, request, *args, **kwargs): pass # 1)拿到前台的手机号 # 2)调用txsms生成手机验证码 # 3)调用txsms发送手机验证码 # 4)失败反馈信息给前台 # 5)成功服务器缓存手机验证码 - 用缓存存储(方便管理) - redis # 6)反馈成功信息给前台
验证码数据的校验的存储问题,引入了数据缓存,执行的效率,redis。
redis数据库
学习内容可以参考菜鸟教程的文章,比较全面。
:https://www.runoob.com/redis/redis-commands.html
为什么要学习Redis?
""" 1、redis是内存 no-sql 数据库,相比mysql等硬盘数据库效率高 2、在内存值配置数据库使用,而不直接使用内存,redis存储的数据是可以管理的 3、memcache也是内存数据库,且django默认采用的就是memcache数据库,用redis替换memcache的路由很简单,后者更强大 redis支持更多的数据类型 redis自带缓存机制,出现数据库系统崩溃数据也是可以有找回的功能 redis可以主动完成数据持久化(自带数据持久化功能) redis的数据过期时间机制也可以自身完成 """
总结:Redis与其他key-value缓存产品有一下三个特点
1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 3、Redis支持数据的备份,即master-slave模式的数据备份。
redis安装
注:在官网安装系统版本,下载对应安装包安装即可
基础命令
""" 启动服务: >: redis-server & 启动客户端连接redis >: redis-cli -h localhost -p 6379 -n 数据库编号(0~15) 连接成功后切换数据库 >: select 数据库编号 """
命令行简单使用redis:
-- redis-cli # 启动客户端 -- set key value # 设置值 -- get key # 取出值
常用的设置获取名字操作
有时候会有中文乱码,要在redis-cli后面加上 --raw
redis-cli --raw
就可以避免中文的乱码了
""" 支持的数据类型:String、Hash、List、Set、Sorted Set String:存储其他类型不能存的所有数据 Hash:存储 key-value 形式数据,类似于字典 List:存储 一系列有序value 形式数据,列表(数组) Set:存储 一系列无序value 形式数据,集合 Sorted Set:存储 有排列标号value 形式数据,排行 """
""" 重要方法 set:key value get:key mset:k1 v1 k2 v2 ... kn vn mget:k1 k2 ... kn setex:key exp value """
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETEX key seconds value
常用的命令
序号 | 命令及描述 |
---|---|
1 | SET key value 设置指定 key 的值 |
2 | GET key 获取指定 key 的值。 |
3 | GETRANGE key start end 返回 key 中字符串值的子字符 |
4 | GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。 |
5 | GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。 |
6 | MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。 |
Redis 哈希(Hash)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,类似字典形式。
常用的命令
""" 常用方法: 单增:hset key field value
单查:hget key field
所有键值:hgetall key 单删:hdel key field
所有key:hkeys key 所有值:hvals key """
列表操作
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
""" 右增: rpush key v1 v2 ... vn 左增: lpush key v1 v2 ... vn 修改: lset key index value 左删: lpop key 右删: rpop key 插入:linsert key before|after old_value new_value 区间:lrange key begin_index end_index """
集合操作
""" 增:sadd key v1 v2 ... vn 差集:sdiff key1 key2 并集:sinter key1 key2 交集:sunion key1 key2 查:smembers key 随机删:spop key """
有序集合
""" 增:zadd key score1 value1 score2 value2 ... scoren valuen 区间个数:zcount key begin_score end_score 排行低到高:zrange key begin_index end_index 排行高到低:zrevrange key begin_index end_index """
本文来自博客园,作者:游走De提莫,转载请注明原文链接:https://www.cnblogs.com/Gaimo/p/11762380.html