第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)——键值CP 15
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及HTTP 42
2.1.1Web简介 42
2.1.2HTTP协议 43
2.1.3HTTP协议方法 44
2.2HTML、CSS、JavaScript 45
2.2.1HTML 45
2.2.2CSS 45
2.2.3JS(JavaScript) 46
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.6Django路由URL 61
2.6.1UrlConf简介 61
2.6.2UrlConf的Urlpatterns 62
2.6.3UrlConf的路由分发 63
2.6.4UrlConf的反向解析 64
2.6.5UrlConf的命名空间 65
2.7Django模板Template 66
2.7.1Django Template Language简介 67
2.7.2Django Template加载配置及基本使用 69
2.7.3Django Template的Render快捷使用 71
2.8Django模型Model 72
2.8.1Model ORM 73
2.8.2Model示例 73
2.8.3ORM常用Field及属性 77
2.8.4Django Shell操作ORM 79
2.8.5函数视图操作ORM(显示board列表) 81
2.8.6函数视图操作ORM(显示指定board的topic列表) 83
2.8.7函数视图操作ORM(新增topic) 85
2.8.8函数视图操作ORM(指定board的topic内容) 88
2.8.9类视图操作ORM(显示board列表) 90
2.8.10Model的底层数据库连接配置 92
2.9Django表单Form 93
2.10Django后台管理Admin 95
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 Pipeline 129
3.4.5验证 130
3.5使用SaltStack推送服务端脚本 132
3.5.1Salt Master及Salt Minion的安装 132
3.5.2通过Salt Master远程执行脚本命令 134
3.5.3Salt-API配置 137
3.5.4实现远程拉取软件、启停服务的脚本范例 146
3.5.5测试 151
3.6Jenkins REST API使用讲解 153
3.6.1Jenkins原生API的获取 154
3.6.2Python-Jenkins库的安装 159
3.6.3Python-Jenkins的常用方式 160
3.6.4封装一个Python脚本,实现自动化编译软件 163
3.7GitLab REST API使用讲解 167
3.7.1Python-GitLab的安装、配置 167
3.7.2Python-GitLab常用功能使用 169
3.7.3使用Python-GitLab获取Zep-Backend-Java文件列表 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新建项目及App 181
4.2.1新建目录,通过Pip安装相关模块 181
4.2.2新建项目及相关App 181
4.2.3生成数据及管理员密码 182
4.2.4启动Dj ango服务并验证 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重置migration 238
4.13小结 239
第5章 用户注册登录及密码管理 241
5.1用户管理简介 241
5.2Web开发中的Cookie及Session 242
5.2.1Cookie 242
5.2.2Session 243
5.3中间件(Middleware)及预安装(INSTALLED_APPS) 245
5.3.1Django框架中的Middleware 245
5.3.2Django框架中的INSTALLED_APPS 248
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环境流转JS 439
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函数操作Salt-API 476
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客户端(浏览器)WebSocket 520
10.1.2后台服务端WebSocket 523
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.py 529
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实现后端WebSocket 541
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安装DRF 558
11.2.2配置DRF 558
11.3查看和修改用户Token 560
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测试api-token-auth功能 566
11.5实现查看用户的RESTful API 566
11.5.1序列化和反序列化User数据表字段 567
11.5.2生成User视图集合类 568
11.5.3为User的API注册访问路由 569
11.6实现查看发布单的RESTful API 571
11.6.1序列化DeployPool数据表字段 571
11.6.2生成DeployPool视图集合类 572
11.6.3为发布单的API注册访问路由 573
11.7实现查看、新增和修改服务器的RESTful API 575
11.7.1序列化Server数据表字段 575
11.7.2生成Server视图集合类 576
11.7.3为Server API注册访问路由 579
11.7.4使用Requests库测试Server API 580
11.8实现查看、新增和修改App服务应用的RESTful API 582
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.3Top10组件发布单统计 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制作包含u W SGI及Gunicorn、Channels的镜像 615
12.4.3制作Manabe的u W SGI的专用镜像 617
12.4.4制作Manabe的Gunicorn的专用镜像 618
12.5为Mablog应用制作Docker镜像 619
12.6Coverage—— Django代码覆盖率测试 621
12.7小结 623
附录1 Django2.1开发环境配置 624
附1.1Python3.6.6安装配置(Windows) 624
附1.1.1下载 624
附1.1.2安装 625
附1.1.3运行Python3 626
附1.1.4Python IDLE基本操作 626
附1.2Django2.1安装 628
附1.3Python虚拟环境管理 628
附1.3.1内置venv模块 629
附1.3.2pipenv 630
附1.4新建一个Django的demo项目 632
附1.5PyCharm安装配置 632
附1.5.1PyCharm安装 633
附1.5.2PyCharm配置 634
附1.6Are You Ready 637
附1.6.1PEP8 637
附1.6.2Pythonic 639
附录2 GitLab安装配置 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修改外部URL 642
附2.2.5启动GitLab 642
附2.3GitLab服务初始化及TortoiseGit客户端使用 643
附2.3.1更改GitLab管理员密码,登录系统 643
附2.3.2新建一个GitLab项目 644
附2.3.3在Windows下使用TortoiseGit操作GitLab 645
附2.4GitLab系统管理 655
附2.4.1新增项目组 655
附2.4.2新增项目 657
附2.4.3新增用户 658
附2.4.4项目赋权 659
附2.4.5权限明细 661
附录3 Jenkins安装配置 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 Pipeline 669
附3.4.1Pipeline特性——Pipeline as Code 670
附3.4.2Pipeline基本概念 670
附3.4.3创建一个Pipeline示例 670
附3.4.4Pipeline语法参考 673
附3.5Jenkins系统配置 678
附录4 H-ui前端使用入门 680
附4.1H-ui的主要组件 681
附4.1.1表格(http://www.h-ui.net/Hui-3.3-table.shtml) 681
附4.1.2按钮(http://www.h-ui.net/Hui-3.5-button.shtml) 682
附4.1.3表单(http://www.h-ui.net/Hui-3.4-form.shtml) 682
附4.1.4警告(http://www.h-ui.net/Hui-4.8-alert.shtml) 684
附4.1.5模态对话框(http://www.h-ui.net/Hui-4.10-modal.shtml) 684
附4.1.6便签和标号(http://www.h-ui.net/Hui-4.6-labelBadge.shtml) 685
附4.1.7tooltip效果(http://www.h-ui.net/Hui-4.25-tooltip.shtml) 686
附4.1.8标题(http://www.h-ui.net/Hui-3.1-typography.shtml) 686
附4.2H-ui.admin的主要网页 687
附4.2.1Admin主页面 687
附4.2.2Admin网页代码主要框架 688
附4.3将Admin网页合成进Django模板 690
附4.3.1网页顶部导航header.html 690
附4.3.2侧边导航sidemenu.html 692
附4.3.3内部顶部导航topnav.html 695
附4.3.4统一的页脚本footer.html 695
附4.3.5全局基本网页模板template.html 696
附4.3.6继承网页的基本应用,index.html 698
附4.4jQuery、zTree及Select2库的使用 701
附4.4.1jQuery(网址:http://jquery.com/) 702
附4.4.2zTree(网址:http://www.treejs.cn/) 703
附4.4.3Select2(网址:https://select2.org/) 705
附4.5注意事项 707
附录5 Harbor容器私有镜像仓库安装配置 708
附5.1安装Docker及Docker-Compose 709
附5.1.1Docker的安装 710
附5.1.2Docker-Compose的安装 710
附5.2安装Harbor 711
附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