![]() ![]() |
Python 3自动化软件发布系统 -Django 2实战 本书以*的Python 3.6以上版本为编程语言,以Django 2.1以上版本为Web框架,通过一步一步详细讲解,实现一个自动化软件部署系统,并将所有代码开源托管在Github网站上。 书中不但讲解了Python的基础知识、Django的模型、视图、模板之间的关系,而且还通过实战项目,介绍了Django Rest Framework(DRF)的开发步骤、Django Channels实现Websocket的编程技巧,以及Django TestCase、Mock等测试用例的编写。 除此之外,对于IT公司在DevOps转型过程中涉及的GitLab、Jenkins、SaltStack等CI/CD工具的安装配置,以及自动化软件部署系统与之进行交互的API,都有较深入的讲解。 本书适合运维研发领域的人员,或是有一定Python基础但又想深入学习Python Web开发的广大IT人员阅读参考。 作者提供大量图表便于读者理解,书中的实战项目能够快速了解开发,适合基础和想深入学习的读者。 Django第三方模板使用:这方面的知识,主要涉及的是Django REST Framework和Django Channels。一个讲REST API开发,一个讲WebSocket实时应用,都是现代Web开发不得不会的技能。在讲解这些知识时,以笔者个人的学习经历来看,单纯地讲解,或是简单地介绍示例代码,都不会让读者能有多深的理解。所以,我们将结合具体的自动化部署系统代码,把这两者的应用讲明白。 自动化软件部署系统:作为本书的主线,这部分内容是绝对要作为重点讲解的,不但会在每章说明设计的思路,还会有代码段详细讲解主要代码的作用,以及每个功能设计完成之后都有对应的网页截图。书中贴的代码段都有Github上对应的文件名称,并且附有行号。应特别注意的是,因为书中有的代码段是选取Github上文件中的代码片段,所以行号主要是作为代码解释之用,并不对应于真正的文件行号。一定要特别注意这个规则!另外,自动化软件部署系统的前端UI,我们选用的是网上免费开源的Hui的管理框架,这部分内容放在附录里单独讲解。 CI/CD的工具:这是我们自动化部署系统的周边配套工具,主要包括GitLab、Jenkins、SaltStack三个工具。没有这些工具,我们的系统就跑不起来。而没有自动化系统,这些工具却可以通过手工操作实现。所以,这部分内容,也是作为一个运维研发人员必须要熟悉的(但运维研发不需要对这些工具做日常运维和功能管理,这原则上是同部门其他同事的职责)。我们对这部分内容,会讲解其安装、配置、日常管理。同时,由于我们的自动化部署系统需要对接这些工具的API接口,所以,对于这三个工具的API也会做系统调用范围内的讲解。 本书内容 第1章:首先以简短完整的示例代码,从Python基本数据类型开始,系统地讲解了Python这种编程语言中的数据类型、顺序、分支选择语句、循环语句。然后,对函数的类的知识也做了梳理。因为自动化软件部署系统中使用了线程池,所以在本章,进程池和线程池的并发编程也会涉及到。本章接下来讲解的内容,就是Python的模板化及测试方面的内容。这也是我们写代码时必须要了解的。需要说明的是,本书除了在第1章讲解Python的测试内容外,还比较全面地讲解了Django的测试。Django部分的测试内容,没有单独成章节,而是作为一些章节的补充,放置于最后面。Model测试、View测试、Form测试、Mock测试、API测试、Channels连接测试,这些测试用例,都会讲解到。 第2章:从本章开始,重点讲Django这个Web开发框架的内容,包括后面的自动化软件部署系统,也是在Django框架基础之上实现的。在本章中,先讲解了关于Web和HTTP协议的常识,HTML、CSS、JS代码的作用;之后,在Web开发中引入Django介绍。在介绍Django框架时,以循序渐进的方式,逐步引入Django的视图、URL路由、模板和模型数据库的学习。这个学习过程,不是一下就全部推向读者,而是进行了知识点隔离,在进行前面知识讲解的同时,不会涉及后面知识点的内容。这种讲解方法,我们认为是一种更有效的学习方式。在了解了Django的主要知识之后,本章还会介绍Django的表单及开箱即用的后台管理界面,这些知识,可以让读者更快速、更规范地进行Django的Web开发。 第3章:本章主要介绍自动化软件部署系统的工作流,它也是一种Devops的运作流程。有了这个流程模型,在进行后面的代码编写时,才能既见树木,又见森林。在本章开始,写了几个简单的开发示例代码(主要是Java),并进行了经典的编译打包和部署操作。这个手工操作的过程,会在后面用自动化的方法来实现。在有了示例代码之后,本章接着讲解如何将示例代码使用GitLab来管理源代码,使用Jenkins来自动编译源代码生成软件包,使用SaltStack来远程拉取软件包并进行启停部署。本章最后,还讲解了GitLab及Jenkins的主要API接口,这些接口,我们会在后面的开发时,使用第三方功能模块进行配置和调用。 第4章:从本章开始,正式进入软件自动化部署系统的实战开发。在本章中,我们规划好此项目的目录结构,使用Django命令建好相关的App应用,实现全面数据库的设计。在设计每个数据表时,都会讲解这个数据表的作用、每个字段的意义。更重要的是,再结合第2章的知识点,使用Django orm为每个数据表生成一批模拟数据。有了这些数据,就可以更深入地理解orm技巧,更深入地理解部署系统数据库,并且后面开发的每一个UI网页,都有充足的演示数据。 第5章:本章讲解从代码上实现自动化用户管理功能。其主要功能是用户的注册、登录、退出、修改密码和邮箱、忘记密码时的找回、登录时的验证码实现等。由于这些内容涉及了前端和后端开发的知识融合,所以在本章开始,会先讲解Web开发中Cookie及Session的知识。然后,再系统地讲解Django内置的用户管理功能。Manabe项目的用户管理功能,就是在结合Django内置功能及自定义功能之上实现的。在实现用户管理功能的相关代码时,我们会按照表单代码、视图代码、模板代码及路由注册代码这四大步骤(有的功能块可能没有表单内容),细致地讲解代码的主要内容。 第6章:在本章中,主要讲解自动化软件部署系统中应用和服务器的录入。有了这两个功能,再加上合适的权限管理,就能让不同的用户参与到系统的建设中来,让运维研发人员专注于系统的开发和功能的完善,而系统数据的准备性和扩展性就留给不同的部门分别负责。在技术上,本章系统地讲解了Django开发技术中的类视图(class based view)、自定义的四级用户权限设计、zTree的前端库用于实现权限树形展示、Select 2前端库用于多用户的方便选择;在最后,还示范了Django中的Model测试、View测试及Form测试用例的编写。 第7章:在本章,实现了发布单的新建、软件编译功能。其中,在编译软件时,调用了Python的第三方库操作Jenkins的API接口,有了这个功能之后,发布系统就可以将Jenkins隐藏于幕后,减轻一般研发人员亲自操作Jenkins的负担。 第8章:环境流转,是我们在实际工作中遇到的一个功能。可能有的公司不需要,但知道如何实现这一功能,相信对读者会有一定的启发。一个发布系统有了环境流转功能,并对它进行权限管理,就可以将开发、测试、运维三种角色串连起来,形成自动化部署的流水线操作。 第9章:在本章,实现了自动化部署的核心功能软件部署。同样,我们会以视图、网页模板、URL路由的方式进行层层推进实现。对三个最重要的函数,deploy_cmd()、deploy()、cmd_run()的代码,也进行了细致的讲解。其中,涉及到调用saltstack api的内容,也进行了相应的封装。在发布过程中,涉及的服务器和应用的数据表字段变化,都有细致入微的实现。在实现发布的同时,服务启停作为一个附加而常用的功能,也可以进行功能上的实现。当然,这些都是基于第6章的权限管理机制来进行控制的。本章末尾,发布的历史记录功能,也都一一实现。 第10章:在本章,我们使用了Django Channels这样一个较新的WebSocket技术,解决了软件发布过程中的实时日志读取的问题。为了示范分模板的调用,在本章中,我们启动了一个名为mablog的新的Django项目。这个项目的主要目的有两个:一是实现写入日志的API,供第9章的软件发布时调用;二是使用WebSocket的实时双向连接推送技术,把日志作为消费者,在一个连接中实时地从服务器推向浏览器。相对于间隔循环的Ajax,它的优势可以说是相当明显的。但由于这是一个新的异步技术实现,需要读者在熟悉了Django的常规同步编程之后,才能继续本章的学习。在本章接下来的部分,讲解如何使用Daphne在生产中部署mablog项目,以及如何编写Channels连接的测试用例。 第11章:本章主要讲解如何使用Django REST Framework(DRF)进行RESTful API接口的开发。在本章中,首先讲述了DRF的安装配置,以及为了安全而设计的Token认证实现。然后,基于DRF的Viewset集成快速开发功能,实现了用户App应用,以及服务器的API接口开发。其间,涉及到的序列化技术、外键引用技术、Token生成及获取、URL注册规则都有实战级的演示。最后,还使用了Requests库进行Post、Get请求测试,介绍了如何进行DRF的测试用例的编写。 第12章:作为本书的最后一章,首先实现了Django中的Logging日志记录功能,接着使用百度echarts技术,实现了一个简单的发布单数据编译曲线图和柱状图。用户可以在此基础上,实现更多的系统统计和图表功能。Django的生产环境部署,也是一个必不可少的学习内容。在本章,我们示例了在生产环境中推荐的uwsgi、gunicorn的安装及运行,以及前端Nginx代码的配置。同时,为了对接新兴的Docker容器技术,在本章还实现了Nginx镜像,以及支持Uwsgi、Gunicorn、Channels模板的镜像。最后,介绍了如何使用Coverage这个工具,实现Django开发中的代码覆盖率测试报告。 附录1:详细讲解了Python 3.6在Windows系统下的安装、Django 2.1的安装配置、Pycharm开发IDE的基本配置使用。对于日常开发中的Python虚拟环境管理当前流行的基于内置Venv模板及Pipenv都有所涉及。 附录2:现在,很多公司的代码管理平台都从Svn切换到GitLab。这个附录,就讲解了GitLab的安装、服务启停和常用功能的使用,如新增项目及项目组、新增用户及授权。 附录3:Jenkins在中小企业几乎已成为CI工具的代名词,我们的自动化部署系统也是调用Jenkins的API来生成软件包的。在本附录中,首先演示了如何使用Docker容器来快速安装一个Jenkins示例服务器。然后,进行初步的管理配置。接着,介绍了Jenkins新版中的Pipeline的语法入门。有了这些基础知识,就能理解自动化部署系统中的Jenkins方面的内容了。 附录4:在自动化部署系统中,我们使用了一个名为Hui的开源前端管理框架,用于快速生成所有网页的模板。在本附录中,重点讲解了这个Hui前端框架的主要组件。然后,将自动化部署系统的前端网页,按子模板形式进行了划分。有了这些基础知识,在看正文时,前端代码部分就很好地对接起来了。除此之外,对于实践开发过程中使用的三个主要前端库jQuery、zTree、Select 2,也进行了简单的讲解。 附录5:这是本书最后一个附录,讲解了目前最流行的企业Docker仓库管理工具Harbor。其安装、配置、用户管理、项目管理过程,都以实践的形式一一呈现。最后,还进行了Docker上传及下载的测试。读者可以结合第12章的几个镜像,学习如何将企业内容实现Docker镜像的管理。这对于现在的运维及运维研发人员,都可以说是一个基本技能了,故在最后,涉及到了块的内容。 代码规范 本书涉及的代码有三种,下面一一说明其显示规范。
书中的命令行,以BKB小五号字体,加粗强调显示。如下示例:python manage.py runserver2. 命令输出 命令的输出,以BKB小五号字体,加粗强调显示。如下示例:Performing system checks... System check identified no issues (0 silenced). September 15, 2018 - 22:07:46 Django version 2.1, using settings manabe.settings Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.3. 程序代码 程序代码的显示,首先会分行,然后给出此代码所有Github的URL链接地址。此地址以BKB小五号字体、加粗、斜体强调显示。紧接着给出代码内容,每一行代码左边都会有连续的行号,整个代码块以浅灰色为底。代码内容如果强调不为完整文件或内容,会有…省略号出现。如果代码内容强调为一个完整的类或函数或文件,则不会涉及…省略号。总之,一切最终代码,以Github上的为准。 这里需要再次强调的是,代码块中的行号,是为了在接续的代码解释中方便解释之用,并不代表此代码块在Github文件中真正的行号。这样做的原因是,我们常常需要将Github中的一个代码文件,在不同的页面拆成不同的代码块来解释。如果特别强调行号的对应关系,反而会让读者在阅读书中的每一个代码块时,有不连贯的感觉;而且在代码解释中,也会有支离破碎的数字,因而,我们会采用每个代码块自我连续的行号处理方案。这是读者在看本书代码和Github上代码时,需要特别注意的地方。 读者对象 本书不是一本细致讲解Python的入门书,所以希望读者具有一定的Python基础,有过使用Python开发脚本或是其他应用的经验,至少,也应该看过网上几篇入门版的教程。A Byte of Python(《简明Python教程》)这本入门级教程,值得推荐。 另外,也希望读者能有一点运维经验,对Linux系统的操作较熟悉。 能满足以上两点要求的IT从业人员,都可以是本书的读者对象。 致谢 首先,感谢北京航空航天大学出版社的剧艳婕编辑,是她让我们有机会系统地总结自己的技能,并能高效地把本书推送到读者面前。 ========================================================= 本书写作过程,适逢家中新增二宝。妻子潘永日夜操心,孝云大姐不辞辛劳;我则陪伴甚少,无以为报。遥想家母魏恩枢,艰难时代,自学缝纫起家,养大我兄弟姐妹四人,个中强韧,不言而喻。本书如果有小小成就,要归功于这天下无私而伟大的母爱! 陈刚 ========================================================= 感谢亲人,感谢朋友! 王洪军 ========================================================= 感谢公司领导和同事对我们平时工作的支持和理解。 在写作本书时,两位作者参考了网上的大量文档,由于这些文档相互引用的情况比较多,所以本书并未能逐个列举出所有参考资料。在此一一感谢这些朋友,是他们,让这个IT世界更美好。 纠错 限于作者能力有限,书中错误在所难免。如果读者发现其中错误,欢迎发送到作者邮箱aguncn@163.com。请以xxx章节xx页的内容或代码有错误为标题。 陈刚,有关于大数据、软件开发、电商网络平台、云计算和互联网金融平台等工作经验,现主要从事服务器网络运维及运维开发相关的工作,主攻Docker容器技术及Kubernetes的自动化运维,开发语言以Python为主,且涉及php、java和go语言等。 王洪军,有关于电商平台开发经验,主攻运维开发领域,在Docker容器技术及Kubernetes编排技术上有自己独到的见解。 第1章Python基础1
你还可能感兴趣
我要评论
|