python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...
一、python如何操作git
如果你想用python代码操作git需要下载一个模块
安装
pip install gitpython
基本使用
#从远处仓库下载代码到本地
importosfrom git.repo importRepo#创建本地存储地址,没有会自动创建文件
download_path = os.path.join('jason','NB')#从远程仓库下载代码
Repo.clone_from('https://github.com/DominicJi/TeachTest.git',to_path=download_path,branch='master')
常用方法大全
############### 2. pull最新代码 ##############
importosfrom git.repo importRepo
local_path= os.path.join('jason', 'NB')
repo=Repo(local_path)
repo.git.pull()############### 3. 获取所有分支 ##############
importosfrom git.repo importRepo
local_path= os.path.join('jason', 'NB')
repo=Repo(local_path)
branches=repo.remote().refsfor item inbranches:print(item.remote_head)############### 4. 获取所有版本 ##############
importosfrom git.repo importRepo
local_path= os.path.join('jason', 'NB')
repo=Repo(local_path)for tag inrepo.tags:print(tag.name)############### 5. 获取所有commit ##############
importosfrom git.repo importRepo
local_path= os.path.join('jason', 'NB')
repo=Repo(local_path)#将所有提交记录结果格式成json格式字符串 方便后续反序列化操作
commit_log = repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}', max_count=50,
date='format:%Y-%m-%d %H:%M')
log_list= commit_log.split("\n")
real_log_list= [eval(item) for item inlog_list]print(real_log_list)############### 6. 切换分支 ##############
importosfrom git.repo importRepo
local_path= os.path.join('jason', 'NB')
repo=Repo(local_path)
before=repo.git.branch()print(before)
repo.git.checkout('master')
after=repo.git.branch()print(after)
repo.git.reset('--hard', '854ead2e82dc73b634cbd5afcf1414f5b30e94a8')############### 7. 打包代码 ##############
with open(os.path.join('jason', 'NB.tar'), 'wb') as fp:
repo.archive(fp)
把上面功能封装成类
importosfrom git.repo importRepofrom git.repo.fun importis_git_dirclassGitRepository(object):"""git仓库管理"""
def __init__(self, local_path, repo_url, branch='master'):
self.local_path=local_path
self.repo_url=repo_url
self.repo=None
self.initial(repo_url, branch)definitial(self, repo_url, branch):"""初始化git仓库
:param repo_url:
:param branch:
:return:"""
if notos.path.exists(self.local_path):
os.makedirs(self.local_path)
git_local_path= os.path.join(self.local_path, '.git')if notis_git_dir(git_local_path):
self.repo= Repo.clone_from(repo_url, to_path=self.local_path, branch=branch)else:
self.repo=Repo(self.local_path)defpull(self):"""从线上拉最新代码
:return:"""self.repo.git.pull()defbranches(self):"""获取所有分支
:return:"""branches=self.repo.remote().refsreturn [item.remote_head for item in branches if item.remote_head not in ['HEAD', ]]defcommits(self):"""获取所有提交记录
:return:"""commit_log= self.repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}',
max_count=50,
date='format:%Y-%m-%d %H:%M')
log_list= commit_log.split("\n")return [eval(item) for item inlog_list]deftags(self):"""获取所有tag
:return:"""
return [tag.name for tag inself.repo.tags]defchange_to_branch(self, branch):"""切换分值
:param branch:
:return:"""self.repo.git.checkout(branch)defchange_to_commit(self, branch, commit):"""切换commit
:param branch:
:param commit:
:return:"""self.change_to_branch(branch=branch)
self.repo.git.reset('--hard', commit)defchange_to_tag(self, tag):"""切换tag
:param tag:
:return:"""self.repo.git.checkout(tag)if __name__ == '__main__':
local_path= os.path.join('codes', 'luffycity')
repo=GitRepository(local_path,remote_path)
branch_list=repo.branches()print(branch_list)
repo.change_to_branch('dev')
repo.pull()
二、服务器管理代码
1.创建服务器表
classServer(models.Model):"""服务器表"""hostname= models.CharField(max_length=32,verbose_name='主机名')
额外补充:
1.每一个应用都可以有自己的模版文件夹、静态文件夹、urls.py、还可以将views.py变成文件夹的形式,里面根据业务逻辑的不同再拆封成不同的py文件
2.django默认全局语言环境是英文的,但是它内部其实支持多国语言,你可以修改语言环境
#配置文件中修改
LANGUAGE_CODE = 'zh-hans'
3.针对删除功能,以前的逻辑:后端直接删除对应的数据,然后重定向到展示页
当数据特别多,并且涉及到分页的情况,我需要删除第99页的某一条数据,如果按照之前的方式则会跳到第一页
较为完整的删除功能应该做到
二次确认
DOM操作实现删除效果,前端删除
2.服务器管理的增删改查
创建好表之后,创建服务器管理展示页面。
服务器查询:(展示所有服务器)
defserver_list(request):
server_list=models.Server.objects.all()return render(request,'server_list.html',locals())
#页面展示服务器id和hostname
{% for server in server_list %}
{{ server.id }} {{ server.hostname }} {% endfor %}
服务器增加
使用modelform筛选
defserver_add(request):#生成modelform对象
form_obj=ServerModelForm() #form组件还有渲染的功能,传递form对象给前端if request.method == 'POST':#校验数据
form_obj=ServerModelForm(data=request.POST) #form.html页面提交的数据
ifform_obj.is_valid():#合法保存数据
form_obj.save()return redirect('server_list')return render(request,'form.html',locals()) #form_obj传递到form.html
views.py
defserver_add(request):#生成modelform对象
form_obj=ServerModelForm() #form组件还有渲染的功能,传递form组件给前端
print(form_obj)if request.method == 'POST':#校验数据
form_obj=ServerModelForm(data=request.POST) #form.html页面提交的数据
ifform_obj.is_valid():#合法保存数据
form_obj.save()return redirect('server_list')return render(request,'form.html',locals()) #form_obj传递到form.html
服务器编辑
views.py
defserver_edit(request,edit_id):#根据edit_id查询出服务器对象
edit_obj=models.Server.objects.filter(id=edit_id).first()#modelform中的instance可以用于初始化页面
#由于编辑页面跟添加页面长得其实是一样的 无外乎有没有默认数据 所以编辑和添加公用一个页面
form_obj = ServerModelForm(instance=edit_obj)if request.method == 'POST':
form_obj= ServerModelForm(data=request.POST,instance=edit_obj) #用于更新
if form_obj.is_valid(): #数据校验
form_obj.save()return redirect('server_list')return render(request,'form.html',locals())
服务器删除
views.py
defserver_delete(request,delete_id):
models.Server.objects.filter(id=delete_id).delete() #数据库删除
return HttpResponse({'status':True})
server_list.html
删除{% block js %}
var res= confirm('你确定要删除吗?');//返回值是布尔值if(res){//朝后端发送删除数据的请求
$.ajax({
url:'/server/delete/' + rid + '/',
type:'get',
dataType:'JSON',
success:function (args) {if(args.status){//前端DOM操作删除对应的标签//找到当前删除按钮所在的一行表格标签 删除即可
$(ths).parent().parent().remove();
}
}
})
}
}{% endblock %}
三、项目管理代码
1.创建项目管理表
classProject(models.Model):"""项目表"""title= models.CharField(max_length=30,verbose_name='项目名')
repo=models.CharField(max_length=30,verbose_name='代码仓库地址')
env_choice=(
('prod','正式'), #prod是放在数据库的,正式是展示在前端的
('test','测试')
)
env= models.CharField(max_length=16,verbose_name='项目环境',choices=env_choice,default='test')
path=models.CharField(max_length=255,verbose_name='线上项目地址',default='data/tmp')#项目与服务器的关系表
servers=models.ManyToManyField(to='Server',verbose_name='关联服务器')
代码优化
1.公用添加页面
2.将所有的modlform单独开设文件夹存储
3.对modelform再次优化 对modelform定义一个父类
from django.forms importModelFormclassBaseModelForm(ModelForm):#将不需要bootstrap样式的字段放入
exclude_bootstrap =[]def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)#给字段加上form-control样式
#self.fields = {'字段名':字段对象}
for k,field inself.fields.items():if k in self.exclude_bootstrap: #排除不需要加样式的字段
continuefield.widget.attrs['class'] = 'form-control'
#其他modelform书写
from app01 importmodelsfrom app01.myform.mybase importBaseModelFormclassProjectModelForm(BaseModelForm):classMeta:
model=models.Project
fields= '__all__'
2.项目管理的增删改查
项目管理的增删改查大致和服务器类似,只要注意字段的更换就行
python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...相关推荐
- 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...
- python做图片浏览器_保护隐私,用Python打造自己的照片浏览器
现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...
- 用python做flash动画_将Flash应用于Python项目
=== 写在之前 === {{{ 这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo. 没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxp ...
- python做图片美化_如何美化MATLAB和Python画出来的图
如何美化MATLAB和Python画出来的图 写在前面 俗话有句叫做:字不如表,表不如图,意思就是图可以最直观最显然的表达我们想要表达的信息,其升降趋势一目了然:表其次,能够看到数值,但是想要看出变化 ...
- python做什么模型_主题模型初学者指南[Python]
引言 近年来涌现出越来越多的非结构化数据,我们很难直接利用传统的分析方法从这些数据中获得信息.但是新技术的出现使得我们可以从这些轻易地解析非结构化数据,并提取出重要信息. 主题模型是处理非结构化数据的 ...
- python做地图导航_(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)...
Welcome to巧乐希 Jion us!学习Python! 小溪流 终将汇成大海 作者:小溪流(爱好科技教育的工程师.) 像孩子一样学习Python. 疫情的每日数据变化牵动着千万人的心,我多么希 ...
- r与python做随机森林_随机森林算法入门(python)
昨天收到yhat推送了一篇介绍随机森林算法的邮件,感觉作为介绍和入门不错,就顺手把它翻译一下. 目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什 ...
- python做一个问答系统_手把手教你用Python搭建一个AI智能问答系统
导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...
- 用python做数据挖掘_你用 Python 做过什么有趣的数据挖掘项目?
有网友在知乎提问:「你用 Python 做过什么有趣的数据挖掘项目?」 我最近刚开始学习 Python, numpy, scipy 等, 想做一些数据方面的项目,但是之前又没有这方面的经验.所以想知道 ...
最新文章
- Kubernetes删除一直处于Terminating状态的namespace
- 我弥留之际 - 许立志 (珍藏)
- RuoYi-Cloud 部署篇_02(linux环境 Oracle +nginx版本)
- 【三维深度学习】基于片元的渐进式三维点云上采样模型
- Kafka无法消费?!我的分布式消息服务Kafka却稳如泰山!
- 基于SSM的物业管理系统-JSP MYSQL小区物业费管理系统
- 夜天之书 #34 企业如何实践开源协同
- 华为手机系统更新成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
- Zema自学--3(实际操作)
- 清越光电科创板IPO过会:年营收6.9亿 高新创投是股东
- (64)-- 爬取58同城网页信息
- rust提示游戏安全违规_RUST 游戏启动不了 每次都是 Rust Launcher Error: Loading Error - Start Service failed (1450)...
- 2020-02-28-E-prime主要常见问题及matlab、python打marker方式
- 变革财智 越秀集团携手远光软件探路数字财资新征程
- linux程序作为桌面壁纸,在Linux系统下安装壁纸程序Wonderwall,附主要功能介绍
- exe免杀宝典 #exe免杀 #Python打包exe
- webservice客户端命名空间
- 消息中间件(一)MQ详解及四大MQ比较
- 藏文文字检测识别存在的问题有哪些?
- 黑莓免费企业服务器 BlackBerry Enterprise Server Express 5.0.2
热门文章
- 18.mysql优化(三)–explain分析sql语句执行效率
- 【C/C++开发】【VS开发】win32位与x64位下各类型长度对比
- Spring MVC之cookies跟session 数据绑定
- Git是目前世界上最先进的分布式版本控制系统(没有之一)。
- Android 分析工具 APKAnalyser
- C# DDOS攻击代码
- 关于Relay Log无法自动删除的问题
- http://renmin.cnblogs.com/archive/2006/03/03/341669.aspx
- Music Workshop (Unix Name: clavio)
- spring注册bean