项目开发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 = ["", "", ""]
# 短信模板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 = [""] # 当模板没有参数时,`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
"""

最新文章

  1. Linq和Lamda表达式的简单处理方式
  2. Android接口传递Json数组的处理方式
  3. NGUI Scroll List
  4. 计算纯文本情况下RichTextBox实际高度的正确方法(.NET)
  5. [BZOJ1477]青蛙的约会
  6. google prettify 代码高亮显示
  7. angularJS中ng-change的用法
  8. POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)+后缀数组模板
  9. Tomcat发布项目时,浏览器地址栏图标的问题
  10. Linux中的.emacs文件
  11. csapp lab3 bufbomb 缓存区溢出攻击 《深入理解计算机系统》
  12. TOJ 1139.Compromise
  13. SQLServer 使用 @@ERROR
  14. css透明度的设置
  15. 201521123034 《Java程序设计》第9周学习总结
  16. oracle空间索引
  17. Linux命令-权限
  18. Nginx安装、配置虚拟主机、反向代理、负载均衡
  19. Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)
  20. 用CSS让字体在一行内显示不换行

热门文章

  1. HDU_4960 2014多校9 Another OCD Patient DP
  2. OnPaint中画图遇到的问题
  3. 大二暑假第一周总结--初次安装配置Hadoop
  4. 网络基础:OSI 七层模型、TCP/IP 四层模型
  5. 二十四、CI框架之URL辅助函数
  6. 一、VIP课程:互联网工程专题 01-Git基本概念与核心命令掌握
  7. html5有哪些新特性、移除了那些元素?
  8. 12 react 基础 的 css 过渡动画 及 动画效果 及 使用 react-transition-group 实现动画
  9. CTF密码学常见加密解密总结
  10. 《C Primer Plus》- 第二章 C语言概述