项目开发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)

腾讯云短信二次封装

根据腾讯云提供的短信模板,修改二次封装并使用。

libs/txsms/settings.py
# 短信应用 SDK AppID - SDK AppID 以1400开头
APP_ID = ...
# 短信应用 SDK AppKey
APP_KEY = "..."
# 短信模板ID,需要在短信控制台中申请
TEMPLATE_ID = ...
# 签名 - 是`签名内容`,而不是`签名ID`
SMS_SIGN= "..."
# 电话前缀
MOBILE_PREFIX = 86

libs/txsms/sms.py

# 通过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__.py

# 包对外提供的功能方法
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

就可以避免中文的乱码了

redis数据类型

"""
支持的数据类型: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
"""

 

 

 

posted @ 2019-10-29 23:34  游走De提莫  阅读(275)  评论(0编辑  收藏  举报