新書推薦:
《
中国历史研究入门(全二册)
》
售價:HK$
283.8
《
夺回大脑 如何靠自己走出强迫
》
售價:HK$
65.8
《
夏天,19岁的肖像(青鲤文库)岛田庄司两次入围日本通俗文学奖直木奖的作品 ,同名电影由黄子韬主演!
》
售價:HK$
49.5
《
图解机械工程入门
》
售價:HK$
96.8
《
股市长线法宝(第6版)
》
售價:HK$
140.8
《
中文版SOLIDWORKS 2024机械设计从入门到精通(实战案例版)
》
售價:HK$
98.9
《
纯数学教程
》
售價:HK$
85.8
《
威尔士史:历史与身份的演进
》
售價:HK$
107.8
編輯推薦:
作者提供大量图表便于读者理解,书中的实战项目能够快速了解开发,适合基础和想深入学习的读者。
內容簡介:
本书以*的Python 3.6以上版本为编程语言,以Django 2.1以上版本为Web框架,通过一步一步详细讲解,实现一个自动化软件部署系统,并将所有代码开源托管在Github网站上。
书中不但讲解了Python的基础知识、Django的模型、视图、模板之间的关系,而且还通过实战项目,介绍了Django Rest FrameworkDRF的开发步骤、Django Channels实现Websocket的编程技巧,以及Django TestCase、Mock等测试用例的编写。
除此之外,对于IT公司在DevOps转型过程中涉及的GitLab、Jenkins、SaltStack等CICD工具的安装配置,以及自动化软件部署系统与之进行交互的API,都有较深入的讲解。
本书适合运维研发领域的人员,或是有一定Python基础但又想深入学习Python Web开发的广大IT人员阅读参考。
關於作者:
陈刚,有关于大数据、软件开发、电商网络平台、云计算和互联网金融平台等工作经验,现主要从事服务器网络运维及运维开发相关的工作,主攻Docker容器技术及Kubernetes的自动化运维,开发语言以Python为主,且涉及php、java和go语言等。
王洪军,有关于电商平台开发经验,主攻运维开发领域,在Docker容器技术及Kubernetes编排技术上有自己独到的见解。
目錄 :
第1章Python基础1
1.1Python基本数据类型的常用操作5
1.1.1数字Number人生不能只会做减法6
1.1.2字符串String一入编码深似海8
1.1.3列表List古龙之七种武器10
1.1.4元组Tuple一颗不变心14
1.1.5字典Dictionary键值CP15
1.1.6集合Set我们的集合无悖论16
1.2顺序、分支及循环语句17
1.2.1顺序编程知所先后,则近道矣18
1.2.2分支语句《交叉小径的花园》19
1.2.3循环《恐怖游轮》21
1.3函数和类22
1.3.1函数好莱坞原则22
1.3.2类有没有对象,都累25
1.4并发编程28
1.4.1进程池示例《低俗小说》28
1.4.2线程池示例30
1.5模块化31
1.6测试34
1.7小结39
第2章Django基础42
2.1Web及HTTP42
2.1.1Web简介42
2.1.2HTTP协议43
2.1.3HTTP协议方法44
2.2HTML、CSS、JavaScript45
2.2.1HTML45
2.2.2CSS45
2.2.3JSJavaScript46
2.2.4Python、Django是怎么和Web搭上关系的46
2.3Django简介及Web实现48
2.3.1Django简介48
2.3.2Python的Web服务器49
2.3.3Django模块实现Web服务器49
2.4Django新建项目应用及运行机制50
2.4.1新建Django项目应用50
2.4.2Django目录及文件分析51
2.4.3Django框架的工作机制53
2.5Django视图55
2.5.1基于函数的视图55
2.5.2Django的HttpRequest对象58
2.5.3Django HttpRequest对象中的QueryDict对象59
2.5.4Django的HttpResponse对象59
2.6.1UrlConf简介61
2.6.2UrlConf的Urlpatterns62
2.6.3UrlConf的路由分发63
2.6.4UrlConf的反向解析64
2.6.5UrlConf的命名空间65
2.7Django模板Template66
2.7.1Django Template Language简介67
2.7.2Django Template加载配置及基本使用69
2.7.3Django Template的Render快捷使用71
2.8Django模型Model72
2.8.1Model ORM73
2.8.2Model示例73
2.8.3ORM常用Field及属性77
2.8.4Django Shell操作ORM79
2.8.5函数视图操作ORM显示board列表81
2.8.6函数视图操作ORM显示指定board的topic列表83
2.8.7函数视图操作ORM新增topic85
2.8.8函数视图操作ORM指定board的topic内容88
2.8.9类视图操作ORM显示board列表90
2.8.10Model的底层数据库连接配置92
2.9Django表单Form93
2.10Django后台管理Admin95
2.10.1Admin界面登录95
2.10.2应用Model的注册96
2.10.3Model Admin自定义管理界面98
2.11Django测试99
2.12小结100
第3章自动化软件发布工作流101
3.1示例项目102
3.1.1编写示例代码102
3.1.2编译项目105
3.1.3手工运行106
3.1.4其他示例代码107
3.2使用GitLab保存源代码109
3.2.1建立用户和项目组109
3.2.2建立项目113
3.2.3将本地代码推送到GitLab中115
3.3使用Jenkins编译项目120
3.4使用Nginx作为软件仓库125
3.4.1Jenkins和Nginx服务器之间免密码登录126
3.4.2安装并配置Nginx服务器128
3.4.3安装Jenkins插件128
3.4.4配置Jenkins Pipeline129
3.4.5验证130
3.5使用SaltStack推送服务端脚本132
3.5.1Salt Master及Salt Minion的安装132
3.5.2通过Salt Master远程执行脚本命令134
3.5.3SaltAPI配置137
3.5.4实现远程拉取软件、启停服务的脚本范例146
3.5.5测试151
3.6Jenkins REST API使用讲解153
3.6.1Jenkins原生API的获取154
3.6.2PythonJenkins库的安装159
3.6.3PythonJenkins的常用方式160
3.6.4封装一个Python脚本,实现自动化编译软件163
3.7GitLab REST API使用讲解167
3.7.1PythonGitLab的安装、配置167
3.7.2PythonGitLab常用功能使用169
3.7.3使用PythonGitLab获取ZepBackendJava文件列表174
3.8小结175
第4章自动化发布的数据库模型176
4.1功能展示176
4.1.1用户管理176
4.1.2应用App的管理176
4.1.3服务器的管理178
4.1.4应用权限的管理178
4.1.5发布单的新建及软件包编译179
4.1.6环境流转179
4.1.7软件发布180
4.1.8软件流转及发布历史181
4.2新建项目及App181
4.2.1新建目录,通过Pip安装相关模块181
4.2.2新建项目及相关App181
4.2.3生成数据及管理员密码182
4.2.4启动Django服务并验证184
4.2.5与PyCharm集成185
4.3调整文件内容186
4.3.1中文及时区186
4.3.2App注册187
4.3.3URL路由调整189
4.4Django Models的抽象基类190
4.5应用数据表192
4.5.1models.py文件内容192
4.5.2将应用数据表迁移进数据库196
4.5.3生成模拟数据198
4.6环境数据表204
4.6.1models.py文件内容204
4.6.2将环境数据表迁移进数据库204
4.6.3生成模拟数据206
4.7服务器数据表207
4.7.1models.py文件内容207
4.7.2将服务器数据表迁移进数据库209
4.7.3生成模拟数据211
4.8发布单状态数据表212
4.8.1models.py文件内容213
4.8.2将发布状态数据表迁移进数据库213
4.8.3生成模拟数据215
4.9发布单数据表216
4.9.1models.py文件内容216
4.9.2将发布单数据表迁移进数据库220
4.9.3生成模拟数据221
4.10权限管理数据表224
4.10.1models.py文件内容225
4.10.2将权限数据表迁移进数据库226
4.10.3生成模拟数据228
4.11历史记录数据表231
4.11.1models.py文件内容231
4.11.2将历史数据表迁移进数据库232
4.12理解Django Migrate数据迁移233
4.12.1Migrate原理234
4.12.2理解更新models.py文件的原理236
4.12.3重置migration238
4.13小结239
第5章用户注册登录及密码管理241
5.1用户管理简介241
5.2Web开发中的Cookie及Session242
5.2.1Cookie242
5.2.2Session243
5.3中间件Middleware及预安装INSTALLED_APPS245
5.3.1Django框架中的Middleware245
5.3.2Django框架中的INSTALLED_APPS248
5.4用户管理249
5.4.1用户注册250
5.4.2用户认证250
5.4.3用户登录250
5.4.4用户退出251
5.4.5修改密码251
5.5用户组管理252
5.6Django权限功能253
5.6.1权限管理简介253
5.6.2用户权限254
5.6.3用户组权限256
5.7Manabe用户注册256
5.7.1用户注册表单257
5.7.2用户注册视图260
5.7.3用户注册模板262
5.7.4用户注册路由267
5.8Manabe用户登录及退出268
5.8.1用户登录表单268
5.8.2用户登录视图269
5.8.3用户登录模板270
5.8.4用户登录路由272
5.9Manabe邮箱更改272
5.9.1邮箱更改表单273
5.9.2邮箱更改视图274
5.9.3邮箱更改模板275
5.9.4邮箱更改路由276
5.10Manabe密码更改277
5.10.1密码更改表单277
5.10.2密码更改视图279
5.10.3密码更改模板280
5.10.4密码更改路由281
5.11Manabe通过邮箱重置密码281
5.11.1Django邮件发送功能启用282
5.11.2密码重置路由注册283
5.11.3密码重置模板284
5.11.4Django内置视图总结291
5.12Manabe登录验证码294
5.13Manabe首页297
5.13.1网站首页视图298
5.13.2网站模板298
5.13.3Django内置视图总结301
5.14小结302
第6章应用录入和服务器录入303
6.1App服务录入页面303
6.1.1App服务网页功能展示303
6.1.2录入、编辑、展示的URL设置306
6.1.3App录入的视图308
6.1.4App录入的表单312
6.1.5App录入的模板318
6.1.6App录入的浏览器验证323
6.2App服务编辑页面323
6.2.1App编辑视图323
6.2.2App编辑模板文件325
6.3App服务列表展示328
6.3.1App服务列表视图328
6.3.2App服务列表模板文件330
6.4App服务详情页面336
6.4.1App服务详情视图336
6.4.2App服务详情模板337
6.5App服务权限设计339
6.5.1Rightadmin权限模块的路由340
6.5.2Rightadmin权限显示342
6.5.3Rightadmin权限显示后端的实现345
6.5.4Rightadmin权限编辑功能模板346
6.5.5Rightadmin权限编辑后端的实现349
6.5.6Rightadmin权限调用的实现351
6.6服务器的录入、编辑、展示354
6.6.1服务器模块的URL路由设置355
6.6.2服务器的录入视图类、Form表单文件及模板356
6.6.3服务器的编辑视图类及模板364
6.6.4服务器的展示视图类及模板368
6.6.5服务器的详情视图类及模板373
6.7Django Model测试375
6.8Django View测试377
6.9Django Form测试378
6.10小结381
第7章生成发布单382
7.1发布单介绍383
7.2新建发布单384
7.2.1新建发布单表单384
7.2.2新建发布单视图388
7.2.3新建发布单模板390
7.2.4新建发布单路由393
7.3发布单列表394
7.3.1发布单列表视图395
7.3.2发布单列表模板396
7.3.3发布单列表路由399
7.4编译程序包400
7.4.1编译视图400
7.4.2编译模板405
7.4.3编译路由410
7.4.4程序包检测410
7.5发布单详情412
7.5.1发布单详情视图412
7.5.2发布单详情模板413
7.5.3发布单详情路由414
7.6通过上传方式新建发布单414
7.6.1发布单上传表单415
7.6.2发布单上传视图417
7.6.3发布单上传模板421
7.6.4发布单上传路由424
7.7小结425
第8章环境流转426
8.1环境流转列表426
8.1.1环境流转列表视图427
8.1.2环境流转列表模板429
8.1.3环境流转列表路由434
8.2环境流转功能435
8.2.1环境流转功能视图435
8.2.2环境流转模板438
8.2.3环境流转JS439
8.2.4环境流转路由441
8.3环境流转历史442
8.3.1环境流转历史视图442
8.3.2环境流转历史模板444
8.3.3环境流转历史路由448
8.4小结448
第9章软件发布449
9.1发布首页展示449
9.1.1发布首页视图类449
9.1.2发布首页模板文件452
9.1.3发布首页路由设置456
9.2发布详情页展示457
9.2.1发布详情页视图类457
9.2.2发布详情页模板459
9.2.3发布详情页的JS代码466
9.2.4发布详情页路由467
9.3发布功能实现468
9.3.1浏览器的JS获取发布参数,并发布到后端469
9.3.2deploy_cmd函数解析发布参数471
9.3.3deploy函数启动Python的线程池474
9.3.4cmd_run函数操作SaltAPI476
9.3.5cmd_run运行过程中调用的日志读写及数据表更新482
9.3.6服务启停脚本的实现487
9.4服务启停首页展示495
9.4.1服务启停首页视图类495
9.4.2服务启停首页网页模板496
9.4.3服务启停首页路由设置500
9.5服务启停详情页展示500
9.5.1服务启停详情视图类501
9.5.2服务启停详情网页模板503
9.5.3服务启停详情路由510
9.6部署历史实现510
9.6.1部署历史视图函数511
9.6.2部署历史网页模板512
9.6.3部署历史路由设置516
9.7Django Mock测试516
9.8小结518
第10章使用Django Channels实现基于WebSocket的实时日志519
10.1WebSocket协议简介520
10.1.1客户端浏览器WebSocket520
10.1.2后台服务端WebSocket523
10.1.3Django Channels名词解释523
10.2Django Channels项目mablog安装配置526
10.2.1Pip安装Channels模块526
10.2.2新建mablog项目527
10.3mablog数据库Model简介529
10.3.1设计models.py529
10.3.2将models.py的内容更新到数据库530
10.4日志写入实现531
10.4.1wslog的路由设置533
10.4.2wslog的log_add函数533
10.4.3wslog的log_add函数的测试534
10.5实时日志读取实现535
10.5.1日志读取的路由设置536
10.5.2日志读取的视图函数536
10.5.3日志读取的网页模板536
10.6使用Django Channels实现后端WebSocket541
10.6.1改造settings.py文件541
10.6.2新增asgi.py文件544
10.6.3新增routing.py文件545
10.6.4新增consumers.py文件,实现Channels消费者函数546
10.6.5测试ASGI服务器548
10.6.6分析客户端的JS代码549
10.7Django Channels生产环境运行配置551
10.8Django Channels测试552
10.9小结553
第11章使用Django REST Framework开发API接口554
11.1RESTful API及Django REST Framework简介555
11.1.1RESTful关键字556
11.1.2Django REST Framework简介557
11.2DRF安装配置558
11.2.1安装DRF558
11.2.2配置DRF558
11.3查看和修改用户Token560
11.3.1获取和更新Token的视图函数560
11.3.2获取和更新Token的网页模板561
11.3.3获取和更新Token的URL路由561
11.3.4增加网页右上角查看Token的链接562
11.3.5通过网页测试查看和修改用户Token的功能562
11.4手工建立一个API的Django App应用563
11.4.1新增API的目录及文件563
11.4.2在settings.py文件里新增应用565
11.4.3测试apitokenauth功能566
11.5实现查看用户的RESTful API566
11.5.1序列化和反序列化User数据表字段567
11.5.2生成User视图集合类568
11.5.3为User的API注册访问路由569
11.6实现查看发布单的RESTful API571
11.6.1序列化DeployPool数据表字段571
11.6.2生成DeployPool视图集合类572
11.6.3为发布单的API注册访问路由573
11.7实现查看、新增和修改服务器的RESTful API575
11.7.1序列化Server数据表字段575
11.7.2生成Server视图集合类576
11.7.3为Server API注册访问路由579
11.7.4使用Requests库测试Server API580
11.8实现查看、新增和修改App服务应用的RESTful API582
11.8.1序列化App服务应用数据表字段582
11.8.2生成App服务应用视图集合类582
11.8.3为App服务应用API注册访问路由584
11.9Django REST Framework API测试585
11.10小结588
第12章Django日志和数据统计及生产环境部署589
12.1Django Logging日志模块590
12.1.1Logging日志模块简介590
12.1.2为Manabe加上日志功能592
12.2统计自动化部署系统的数据594
12.2.1按天统计发布单的视图及路由595
12.2.2按天统计发布单的类视图、网页模板及echarts代码597
12.2.3Top 10组件发布单统计600
12.3Django生产服务器部署604
12.3.1WSGI协议604
12.3.2uWSGI服务器介绍605
12.3.3uWSGI服务器部署605
12.3.4支持uWSGI的Nginx服务器部署607
12.3.5Gunicorn服务器介绍610
12.3.6Gunicorn服务器部署610
12.3.7支持Gunicorn的Nginx服务器部署612
12.4为Manabe应用制作Docker镜像613
12.4.1制作包含配置及静态资源的Nginx镜像613
12.4.2制作包含uWSGI及Gunicorn、Channels的镜像615
12.4.3制作Manabe的uWSGI的专用镜像617
12.4.4制作Manabe的Gunicorn的专用镜像618
12.5为Mablog应用制作Docker镜像619
12.6CoverageDjango代码覆盖率测试621
12.7小结623
附录1Django 2.1开发环境配置624
附1.1Python 3.6.6安装配置Windows624
附1.1.1下载624
附1.1.2安装625
附1.1.3运行Python 3626
附1.1.4Python IDLE基本操作626
附1.2Django 2.1安装628
附1.3Python虚拟环境管理628
附1.3.1内置venv模块629
附1.3.2pipenv630
附1.4新建一个Django的demo项目632
附1.5PyCharm安装配置632
附1.5.1PyCharm安装633
附1.5.2PyCharm配置634
附1.6Are You Ready637
附1.6.1PEP 8637
附1.6.2Pythonic639
附录2GitLab安装配置640
附2.1源代码管理简介640
附2.2GitLab安装641
附2.2.1配置yum源641
附2.2.2更新本地yum缓存642
附2.2.3安装GitLab社区版642
附2.2.4修改外部URL642
附2.2.5启动GitLab642
附2.3GitLab服务初始化及TortoiseGit客户端使用643
附2.3.1更改GitLab管理员密码,登录系统643
附2.3.2新建一个GitLab项目644
附2.3.3在Windows下使用TortoiseGit操作GitLab645
附2.4GitLab系统管理655
附2.4.1新增项目组655
附2.4.2新增项目657
附2.4.3新增用户658
附2.4.4项目赋权659
附2.4.5权限明细661
附录3Jenkins安装配置663
附3.1Jenkins特性664
附3.2安装664
附3.2.1下载664
附3.2.2运行665
附3.2.3验证666
附3.3配置666
附3.3.1获取初始管理员密码666
附3.3.2安装推荐插件667
附3.3.3创建管理员667
附3.3.4实例配置667
附3.4Jenkins Pipeline669
附3.4.1Pipeline特性Pipeline as Code670
附3.4.2Pipeline基本概念670
附3.4.3创建一个Pipeline示例670
附3.4.4Pipeline语法参考673
附3.5Jenkins系统配置678
附录4Hui前端使用入门680
附4.1Hui的主要组件681
附4.1.1表格http:www.hui.netHui3.3table.shtml681
附4.1.2按钮http:www.hui.netHui3.5button.shtml682
附4.1.3表单http:www.hui.netHui3.4form.shtml682
附4.1.4警告http:www.hui.netHui4.8alert.shtml684
附4.1.5模态对话框http:www.hui.netHui4.10modal.shtml684
附4.1.6便签和标号http:www.hui.netHui4.6labelBadge.shtml685
附4.1.7tooltip效果http:www.hui.netHui4.25tooltip.shtml686
附4.1.8标题http:www.hui.netHui3.1typography.shtml686
附4.2Hui.admin的主要网页687
附4.2.1Admin主页面687
附4.2.2Admin网页代码主要框架688
附4.3将Admin网页合成进Django模板690
附4.3.1网页顶部导航header.html690
附4.3.2侧边导航sidemenu.html692
附4.3.3内部顶部导航topnav.html695
附4.3.4统一的页脚本footer.html695
附4.3.5全局基本网页模板template.html696
附4.3.6继承网页的基本应用,index.html698
附4.4jQuery、zTree及Select 2库的使用701
附4.4.1jQuery网址:http:jquery.com702
附4.4.2zTree网址:http:www.treejs.cn703
附4.4.3Select 2网址:https:select 2.org705
附4.5注意事项707
附录5Harbor容器私有镜像仓库安装配置708
附5.1安装Docker及DockerCompose709
附5.1.1Docker的安装710
附5.1.2DockerCompose的安装710
附5.2安装Harbor711
附5.3Harbor的日常管理716
附5.3.1用户管理716
附5.3.2仓库管理及远程复制717
附5.3.3配置管理718
附5.3.4项目管理719
附5.4测试Docker镜像上传和下载720
附5.4.1更改Docker仓库配置720
附5.4.2上传镜像到Harbor仓库721
附5.4.3从Harbor仓库获取指定镜像722
內容試閱 :
Django第三方模板使用:这方面的知识,主要涉及的是Django REST Framework和Django Channels。一个讲REST API开发,一个讲WebSocket实时应用,都是现代Web开发不得不会的技能。在讲解这些知识时,以笔者个人的学习经历来看,单纯地讲解,或是简单地介绍示例代码,都不会让读者能有多深的理解。所以,我们将结合具体的自动化部署系统代码,把这两者的应用讲明白。
自动化软件部署系统:作为本书的主线,这部分内容是绝对要作为重点讲解的,不但会在每章说明设计的思路,还会有代码段详细讲解主要代码的作用,以及每个功能设计完成之后都有对应的网页截图。书中贴的代码段都有Github上对应的文件名称,并且附有行号。应特别注意的是,因为书中有的代码段是选取Github上文件中的代码片段,所以行号主要是作为代码解释之用,并不对应于真正的文件行号。一定要特别注意这个规则!另外,自动化软件部署系统的前端UI,我们选用的是网上免费开源的Hui的管理框架,这部分内容放在附录里单独讲解。
CICD的工具:这是我们自动化部署系统的周边配套工具,主要包括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 FrameworkDRF进行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页的内容或代码有错误为标题。