Git管理源代码

Git管理源代码

1.前情回顾

session[key]=value是默认存储在服务器内部的

flask-session使用步骤:

1/from flask-session import Session

2/设置session的配置信息到app中

class MyConfig(object):

共有四项配置信息

app.config["SECRET_KEY"] = "fdfdfdfd"app.config["SESSION_TYPE"] = "redis" #指定session的存储类型app.config["SESSION_REDIS"] = StrictRedis() #指定redis服务器的地址app.config["SESSION_USE_SIGNER"] = True#设置session的签名信息app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=10) #设置session在redis中的存储时间

3/读取app中的session配置信息到Session中

2.git介绍

目的:使用分布式系统管理源代码,还可以多人协同开发

作者:Linux

上线时间:2005年

3.git区域介绍

工作区:代码的增删改,可以是我们的pycharm

暂存区:临时存放代码的,一旦提交就没有了

仓库区:用来记录所有操作过程的,都会备份成版本,并永久存在

4.git单人操作

git diff HEAD HEAD^ -- XXX.py写了xxx.py就是看本文件不同版本的不同,不指定文件,就是所有文件的不同点(注意--和文件名之间有空格)

git init切换到创建的git文件夹,然后对所建的文件夹进行初始化

git status查看工作区的状态

git add .或者是文件名添加工作区的文件到暂存区(文件名变成绿色就是保存到了暂存区,红色代表在工作区)

git commit -m '注释'将暂存区的内容提交到仓库区

git commit -am '注释'将工作区-->暂存区--->仓库区

git config user.name '用户名'设置提交作者的名称

git config user.email '邮箱'设置提交作者的邮箱

git log/reflog查看仓库区的版本历史

git reset --hard HEAD^(HEAD~1) 版本号回退版本

git diff 版本1 版本2 -- 文件名比较文件不同版本的区别(注意--和文件名之间有空格)

git rm 文件名使用git删除文件

git reset --hard HEAD^

撤销工作区的内容:git checkout 文件名

撤销暂存区:git reset HEAD 文件名

5.git多人操作

目的:多个人来维护同一份代码

步骤:

1/先克隆git clone 项目地址,克隆之后进入到克隆的文件夹中

2/需要改一下名字和邮箱

3/将工作区-->暂存区--->仓库区

4/提交到gitee远程仓库中git push

5/其他人用的时候也需要先克隆

6/然后进入到克隆的文件夹中,也需要改一下名字和邮箱.

7/其他人更改之后提交到远程仓库

8/想看到其他的代码,不需要克隆了,只需要拉下来git pull

命令:

git clone 地址 将远程仓库的代码克隆到本地

git push将本地仓库的代码推送到远程

git pull将远程仓库的代码更新到本地

6.冲突问题

目的:了解冲突的产生过程,以及解决办法

rejected拒绝

产生原因:就是比如经理和我同时更改,但是经理提交的比较快,经理改正之后,我没有及时的更新服务器,还是之前的版本,然后提交的时候就被拒绝了.我们在提交的时候必须保证本地的版本和服务器的版本是一致的.这个时候我们可能需要将远程的代码pull下来,但是合并之后的文件里面有提示信息,就是经历修改的,和我自己修改的,以及git自动生成的一些提示信息,当出现冲突的时候,去和经理商量冲突的问题是按自己的解决方案还是经理的解决方案,商量之后,可以再提交提交的时候一定不要有一些乱七八糟的提示信息,要不然会出现问题

7.冲突分析&问题解决

其实在工作中,每个人都是负责不同的模块,所以冲突问题很少有,所以不能去修改同事的代码.而且我们在工作中,下班的提交要赶紧提交,要不然太晚,出现问题,同事都回家了,没人商量了,减少问题.上班前第一件事就是pull拉下来

冲突的产生:

1/一直写不提交

2/擅自修改同事的代码

8.标签的使用

目的:当一个大的版本完成之后需要做好记录和备份,可以使用标签

设置本地标签:git tag -a 标签名 -m 描述

推送本地标签到远程:git push origin 标签名

删除本地标签:git tag -d 标签名

删除远程的:git push origin --delete tag 标签名

9.分支使用

分支作用:

1/碰到了难题

目的:

开辟一个分支专门解决项目中遇到的难题,方便我们继续进行开发,当解决完了,再将分支合并.

还有一种情况,就是当公司一个新同事来的时候,新建一个分支,让他在分支上开发所需要的功能,如果功能能用,就将这个分支合并到项目里,如果不能用,或者很糟糕,直接删除即可,不会影响项目的开发.

自分支刚开始是和主分支完全一样的,因为是从主分支分离的

合并的操作是从主分支里面进行操作的

代码:

查看当前分支git branch

创建一个分支git checkout -b 分支

切换分支:git checkout 分支名

推送本地分支到远程:git push -u origin 分支名

合并分支:git merge 分支名(注意:需要在master执行合并操作.)

修改已经commit的注释内容:

1/先切换到想要修改内容的版本

2/然后输入git commit --amend做对应的修改,control + x退出保存

10.dict和json相互转换(记忆)

在程序员里,前台和前端是一个意思.后台和后端也是一个意思.

json数据:"{'name':'zhangsan','age':'10'}"

需要from flask import json导入一下

1.json转换成字典

dict = json.loads(json)

2.字典转成json:

json = json.dumps(dict)

"""
10,dict和json相互转换

- json数据: "{'name':'zhangsan','age':10}"

- 1.字典转成json
  - json = json.dumps(dict)


- 2.json转成字典
  - dict = json.loads(json)


"""
# import json
from flask import json

#1.字典转成json
dict = {
    "name":"banzhang",
    "age":29
}
json2 = json.dumps(dict)
print(json2)
print(type(json2))


#2.json转成字典
dict2 = json.loads(json2)
print(dict2)
print(type(dict2))

11.断点调试

目的:快速找出bug(臭虫/问题/缺陷)找bug的过程称为debug

在pycharm中用debug打断点的时候,类名或者类里面,不要打断点.视图函数名那一行也不要打断点,可以打在视图函数的内部非注释的地方.

控制台frames中点一下第一个我们工程的名字,可以快速找到断点.

frames左侧两个圆那个按钮点一下会找到所有的断点,在新窗口中减号是删除的意思.

12.新经咨询git管理

添加开源许可证,保护我们的东西不被别人商业化,

如果有的文件是不需要提交的,可以设置忽略文件,比如.idea是我们的pycharm配置信息,在目录下输入touch .gitignore然后打开.gitignore文件,将文件名放入这个文件里,然后提交就好了.(还有.pyc和.pyo(连接c语言)和.pyd(动态库)一般也是忽略的,可以统一写成.py[cod])

我们在pycharm中如果写完后,可以直接提交到git中,在菜单栏中依次点击

VCS---->commit

13.数据库配置

目的:为了在项目中用来存储新闻数据以及用户数据

from flask_sqlalchemy import SQLAlchemy

...class Config(object):
    """工程配置信息"""
    DEBUG = True
    # 数据库的配置信息
    SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/information"
    SQLALCHEMY_TRACK_MODIFICATIONS = Falseapp.config.from_object(Config)
db = SQLAlchemy(app)

14.redis配置

目的:缓存访问频率高的内容,存储session信息,图片验证码,短信验证码

import redis
...class Config(object):
    """工程配置信息"""
    ...    # redis配置
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379app.config.from_object(Config)
db = SQLAlchemy(app)
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)

15.session配置

目的:将来用来保存用户的登录信息

from flask_session import Session
...class Config(object):
    """工程配置信息"""
    SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"
    ...    # flask_session的配置信息
    SESSION_TYPE = "redis" # 指定 session 保存到 redis 中
    SESSION_USE_SIGNER = True # 让 cookie 中的 session_id 被加密签名处理
    SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 使用 redis 的实例
    PERMANENT_SESSION_LIFETIME = 86400 # session 的有效期,单位是秒app.config.from_object(Config)
...
Session(app)

16.CSRFProtect配置

目的:保护app,防止CSRF攻击

校验的请求方式:POST,PUT,PATCH,DELETE

from flask_wtf.csrf import CSRFProtect
...
app.config.from_object(Config)
...
CSRFProtect(app)

同源策略:不同网站之间的cookie不共享

xss可以获取到不同网站之间的cookie

原文发布于微信公众号 - 小闫笔记(Pythonnote)

原文发表时间:2018-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券