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)
1""" 210,dict和json相互转换 3 4- json数据: "{'name':'zhangsan','age':10}" 5 6- 1.字典转成json 7 - json = json.dumps(dict) 8 9 10- 2.json转成字典 11 - dict = json.loads(json) 12 13 14""" 15# import json 16from flask import json 17 18#1.字典转成json 19dict = { 20 "name":"banzhang", 21 "age":29 22} 23json2 = json.dumps(dict) 24print(json2) 25print(type(json2)) 26 27 28#2.json转成字典 29dict2 = json.loads(json2) 30print(dict2) 31print(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.数据库配置
目的:为了在项目中用来存储新闻数据以及用户数据
1from flask_sqlalchemy import SQLAlchemy 2 3...class Config(object): 4 """工程配置信息""" 5 DEBUG = True 6 # 数据库的配置信息 7 SQLALCHEMY_DATABASE_URI = "mysql://root:mysql@127.0.0.1:3306/information" 8 SQLALCHEMY_TRACK_MODIFICATIONS = Falseapp.config.from_object(Config) 9db = SQLAlchemy(app)
14.redis配置
目的:缓存访问频率高的内容,存储session信息,图片验证码,短信验证码
1import redis 2...class Config(object): 3 """工程配置信息""" 4 ... # redis配置 5 REDIS_HOST = "127.0.0.1" 6 REDIS_PORT = 6379app.config.from_object(Config) 7db = SQLAlchemy(app) 8redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
15.session配置
目的:将来用来保存用户的登录信息
1from flask_session import Session 2...class Config(object): 3 """工程配置信息""" 4 SECRET_KEY = "EjpNVSNQTyGi1VvWECj9TvC/+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA" 5 ... # flask_session的配置信息 6 SESSION_TYPE = "redis" # 指定 session 保存到 redis 中 7 SESSION_USE_SIGNER = True # 让 cookie 中的 session_id 被加密签名处理 8 SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 使用 redis 的实例 9 PERMANENT_SESSION_LIFETIME = 86400 # session 的有效期,单位是秒app.config.from_object(Config) 10... 11Session(app)
16.CSRFProtect配置
目的:保护app,防止CSRF攻击
校验的请求方式:POST,PUT,PATCH,DELETE
1from flask_wtf.csrf import CSRFProtect 2... 3app.config.from_object(Config) 4... 5CSRFProtect(app)
同源策略:不同网站之间的cookie不共享
xss可以获取到不同网站之间的cookie