一、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、代码发布流程(服务器管理、项目管理)...相关推荐

  1. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  2. python做图片浏览器_保护隐私,用Python打造自己的照片浏览器

    现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...

  3. 用python做flash动画_将Flash应用于Python项目

    === 写在之前 === {{{ 这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo. 没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxp ...

  4. python做图片美化_如何美化MATLAB和Python画出来的图

    如何美化MATLAB和Python画出来的图 写在前面 俗话有句叫做:字不如表,表不如图,意思就是图可以最直观最显然的表达我们想要表达的信息,其升降趋势一目了然:表其次,能够看到数值,但是想要看出变化 ...

  5. python做什么模型_主题模型初学者指南[Python]

    引言 近年来涌现出越来越多的非结构化数据,我们很难直接利用传统的分析方法从这些数据中获得信息.但是新技术的出现使得我们可以从这些轻易地解析非结构化数据,并提取出重要信息. 主题模型是处理非结构化数据的 ...

  6. python做地图导航_(源代码)用Python制作疫情的实时数据地图(PS:全国以及每个省)...

    Welcome to巧乐希 Jion us!学习Python! 小溪流 终将汇成大海 作者:小溪流(爱好科技教育的工程师.) 像孩子一样学习Python. 疫情的每日数据变化牵动着千万人的心,我多么希 ...

  7. r与python做随机森林_随机森林算法入门(python)

    昨天收到yhat推送了一篇介绍随机森林算法的邮件,感觉作为介绍和入门不错,就顺手把它翻译一下. 目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什 ...

  8. python做一个问答系统_手把手教你用Python搭建一个AI智能问答系统

    导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...

  9. 用python做数据挖掘_你用 Python 做过什么有趣的数据挖掘项目?

    有网友在知乎提问:「你用 Python 做过什么有趣的数据挖掘项目?」 我最近刚开始学习 Python, numpy, scipy 等, 想做一些数据方面的项目,但是之前又没有这方面的经验.所以想知道 ...

最新文章

  1. Kubernetes删除一直处于Terminating状态的namespace
  2. 我弥留之际 - 许立志 (珍藏)
  3. RuoYi-Cloud 部署篇_02(linux环境 Oracle +nginx版本)
  4. 【三维深度学习】基于片元的渐进式三维点云上采样模型
  5. Kafka无法消费?!我的分布式消息服务Kafka却稳如泰山!
  6. 基于SSM的物业管理系统-JSP MYSQL小区物业费管理系统
  7. 夜天之书 #34 企业如何实践开源协同
  8. 华为手机系统更新成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
  9. Zema自学--3(实际操作)
  10. 清越光电科创板IPO过会:年营收6.9亿 高新创投是股东
  11. (64)-- 爬取58同城网页信息
  12. rust提示游戏安全违规_RUST 游戏启动不了 每次都是 Rust Launcher Error: Loading Error - Start Service failed (1450)...
  13. 2020-02-28-E-prime主要常见问题及matlab、python打marker方式
  14. 变革财智 越秀集团携手远光软件探路数字财资新征程
  15. linux程序作为桌面壁纸,在Linux系统下安装壁纸程序Wonderwall,附主要功能介绍
  16. exe免杀宝典 #exe免杀 #Python打包exe
  17. webservice客户端命名空间
  18. 消息中间件(一)MQ详解及四大MQ比较
  19. 藏文文字检测识别存在的问题有哪些?
  20. 黑莓免费企业服务器 BlackBerry Enterprise Server Express 5.0.2

热门文章

  1. 18.mysql优化(三)–explain分析sql语句执行效率
  2. 【C/C++开发】【VS开发】win32位与x64位下各类型长度对比
  3. Spring MVC之cookies跟session 数据绑定
  4. Git是目前世界上最先进的分布式版本控制系统(没有之一)。
  5. Android 分析工具 APKAnalyser
  6. C# DDOS攻击代码
  7. 关于Relay Log无法自动删除的问题
  8. http://renmin.cnblogs.com/archive/2006/03/03/341669.aspx
  9. Music Workshop (Unix Name: clavio)
  10. spring注册bean