第一部分初入江湖
章需求2
1.1需求文档3
1.2需求评审/分析4
1.2.1博客需求评审5
1.2.2评审之后6
1.3功能分析6
1.3.1需求列表6
1.3.2功能点梳理7
1.3.3模块划分8
1.4模块划分9
1.4.1实体及关系9
1.4.2模块划分10
1.5本章总结12
第2章框架基础和技术选型13
第一部分初入江湖
章需求2
1.1需求文档3
1.2需求评审/分析4
1.2.1博客需求评审5
1.2.2评审之后6
1.3功能分析6
1.3.1需求列表6
1.3.2功能点梳理7
1.3.3模块划分8
1.4模块划分9
1.4.1实体及关系9
1.4.2模块划分10
1.5本章总结12
第2章框架基础和技术选型13
2.1Python 2.7与Python 3.x13
2.1.1历史演进13
2.1.2现实场景14
2.1.3为未来做准备15
2.1.4参考资料15
2.2WSGI——Web框架基础15
2.2.1简介15
2.2.2简单的Web Server16
2.2.3多线程版的Web Server17
2.2.4简单的WSGI Application20
2.2.5理解WSGI22
2.2.6WSGI中间件和Werkzeug23
2.2.7参考资料24
2.2.8扩展阅读24
2.3Flask框架24
2.3.1入门推荐25
2.3.2Flask内置功能25
2.3.3匹配需求26
2.3.4总结26
2.4Tornado框架26
2.4.1印象26
2.4.2内置功能27
2.4.3总结27
2.5Django框架28
2.5.1新手友好程度28
2.5.2内置功能29
2.5.3总结29
2.5.4参考资料29
2.6本章总结30
第3章Django小试牛刀31
3.1如何阅读Django文档31
3.1.1文档结构31
3.1.2总结36
3.2学员管理系统的后台开发37
3.2.1需求37
3.2.2初始化环境37
3.2.3创建项目38
3.2.4创建App38
3.2.5编写代码39
3.2.6基础配置(中文)41
3.2.7总结41
3.3学员管理系统的前台开发41
3.3.1开发首页41
3.3.2输出数据42
3.3.3提交数据44
3.3.4优化数据,获取逻辑47
3.3.5总结47
3.4学员管理系统的进阶部分48
3.4.1使用class-based view48
3.4.2配置middleware49
3.4.3编写TestCase提升代码稳定性53
3.4.4总结57
3.5本章总结57
第二部分正式开发
第4章进入开发60
4.1编码规范60
4.1.1import this(Python之禅)61
4.1.2Python编码规范62
4.1.3Django编码风格66
4.1.4总结69
4.1.5参考资料69
4.2虚拟环境69
4.2.1Python 3.3之后自带venv模块69
4.2.2virtualenv的用法70
4.2.3总结71
4.2.4参考资料71
4.3合理的项目结构71
4.3.1原则71
4.3.2通用项目结构71
4.3.3Django项目结构72
4.3.4总结74
4.3.5参考资料74
4.4版本管理与协作:Git74
4.4.1我们的协作方式74
4.4.2Git的基本概念75
4.4.3案例演示76
4.4.4Git进阶76
4.4.5总结80
4.4.6参考资料80
4.5本章总结80
第5章奠定项目基石:Model81
5.1创建项目及配置81
5.1.1拆分settings以适应不同的运行环境83
5.1.2配置settings84
5.1.3配置Git85
5.1.4总结86
5.1.5参考资料86
5.2编写Model层的代码86
5.2.1创建App87
5.2.2配置INSTALLED_APPS92
5.2.3创建数据库[表]93
5.2.4提交代码95
5.2.5总结96
5.2.6参考资料96
5.3Model层:字段介绍96
5.3.1ORM的基本概念97
5.3.2常用字段类型98
5.3.3参数99
5.3.4总结100
5.3.5参考资料101
5.4Model层:QuerySet的使用101
5.4.1QuerySet的概念101
5.4.2常用的QuerySet接口102
5.4.3进阶接口104
5.4.4常用的字段查询105
5.4.5进阶查询106
5.4.6总结107
5.4.7参考资料107
5.5本章总结107
第6章开发管理后台108
6.1配置admin页面108
6.1.1创建blog的管理后台109
6.1.2comment的admin配置115
6.1.3config的admin配置115
6.1.4详细配置116
6.1.5总结117
6.2根据需求定制admin117
6.2.1定义list页面117
6.2.2编辑页面的配置120
6.2.3自定义静态资源引入122
6.2.4自定义Form123
6.2.5在同一页面编辑关联数据123
6.2.6定制site124
6.2.7admin的权限逻辑以及SSO登录125
6.2.8总结127
6.2.9参考资料127
6.3抽取Admin基类127
6.3.1抽象author基类127
6.3.2总结131
6.4记录操作日志131
6.4.1使用LogEntry131
6.4.2查询某个对象的变更133
6.4.3在admin页面上查看操作日志133
6.5本章总结134
第7章开发面向用户的界面135
7.1搭建基础结构与展示文章数据135
7.1.1分析URL和页面数据135
7.1.2编写URL代码137
7.1.3编写View代码138
7.1.4配置模板139
7.1.5模板找不到的错误处理140
7.1.6编写正式的View代码141
7.1.7配置模板数据142
7.1.8总结144
7.1.9参考资料144
7.2配置页面通用数据144
7.2.1完善模板信息144
7.2.2重构post_list视图146
7.2.3分类信息147
7.2.4侧边栏配置150
7.2.5总结150
7.3封装侧边栏逻辑150
7.3.1调整模型151
7.3.2封装好SideBar151
7.3.3总结153
7.4整理模板代码153
7.4.1抽象基础模板153
7.4.2解耦硬编码155
7.4.3总结157
7.5升级至class-based view157
7.5.1函数与类157
7.5.2理解class-based view157
7.5.3改造代码162
7.5.4总结166
7.5.5参考资料166
7.6Django的View是如何处理请求的166
7.6.1class-based view的处理流程166
7.6.2总结167
7.7本章总结167
第8章引入前端样式框架Bootstrap168
8.1Bootstrap的基本用法169
8.1.1介绍169
8.1.2容器和栅格系统169
8.1.3简单的页面布局171
8.1.4总结174
8.1.5参考资料174
8.2基于Bootstrap美化页面174
8.2.1增加themes目录175
8.2.2修改模板176
8.2.3总结180
8.3配置线上静态资源180
8.3.1内联CSS和外联CSS180
8.3.2Django中的静态资源181
8.3.3在模板中使用静态资源182
8.3.4总结183
8.3.5参考资料183
8.4本章总结183
第9章完成整个博客系统184
9.1增加搜索和作者过滤184
9.1.1增加搜索功能185
9.1.2增加作者页面186
9.1.3总结186
9.2增加友链页面186
9.3增加评论模块188
9.3.1评论提交的方式188
9.3.2评论模块通用化改造188
9.3.3实现评论190
9.3.4抽象出评论模块组件和Mixin195
9.3.5修改最新评论模板197
9.3.6总结197
9.3.7参考资料197
9.4配置Markdown编写文章的支持197
9.4.1Markdown第三方库197
9.4.2评论内容支持198
9.4.3文章正文使用Markdown198
9.4.4配置代码高亮199
9.4.5总结201
9.4.6参考资料201
9.5增加访问统计201
9.5.1文章访问统计分析202
9.5.2实现文章访问统计203
9.5.3更加合理的方案206
9.5.4总结206
9.5.5参考资料206
9.6配置RSS和sitemap206
9.6.1实现RSS输出206
9.6.2实现sitemap208
9.6.3配置RSS和sitemap的urls.py209
9.6.4总结210
9.6.5参考资料210
9.7本章总结210
第三部分第三方插件的使用
0章使用第三方插件增强管理后台214
10.1xadmin介绍和使用215
10.1.1特性215
10.1.2安装最新的xadmin代码216
10.1.3admin替换为xadmin216
10.1.4fieldset修改为FieldSet218
10.1.5静态资源Media配置219
10.1.6自定义过滤器219
10.1.7数据处理上的差异221
10.1.8处理inline221
10.1.9site title和site footer的处理222
10.1.10去掉Django admin自带的log配置222
10.1.11总结222
10.2使用django-autocomplete-light优化性能222
10.2.1创造1万个分类223
10.2.2django-autocomplete-light介绍224
10.2.3引入插件224
10.2.4总结226
10.2.5参考资料226
10.3使用django-ckeditor开发富文本编辑器226
10.3.1基础配置227
10.3.2配置图片228
10.3.3上传图片配置228
10.3.4自定义存储以及水印229
10.3.5Markdown和django-ckeditor共存231
10.3.6总结234
10.3.7参考资料234
10.4本章总结235
1章使用django-rest-framework236
11.1接口需求及django-rest-framework介绍237
11.1.1快速上手237
11.1.2配置API docs240
11.1.3总结242
11.1.4参考资料242
11.2生成我们的RESTful接口242
11.2.1区分list和detail242
11.2.2实现分页243
11.2.3实现Category接口244
11.2.4HyperlinkedModelSerializer的使用246
11.2.5其他数据接口的实现248
11.2.6总结248
11.2.7参考资料248
11.3本章总结249
第四部分上线前的准备及线上问题排查
2章调试和优化252
12.1常用的调试和调优手段252
12.1.1调试手段252
12.1.2调优手段259
12.1.3总结262
12.1.4参考资料262
12.2使用django-debug-toolbar优化系统262
12.2.1快速配置262
12.2.2解读数据263
12.2.3配置第三方panel267
12.2.4line_profiler269
12.2.5总结271
12.2.6参考资料271
12.3使用silk271
12.3.1快速配置silk271
12.3.2配置profiling273
12.3.3总结273
12.3.4参考资料273
12.4本章总结274
3章配置MySQL和缓存275
13.1配置MySQL275
13.1.1使用CONN_MAX_AGE优化数据库连接276
13.1.2配置正式的settings277
13.1.3总结277
13.1.4参考资料277
13.2缓存的演化278
13.2.1什么是缓存278
13.2.2缓存装饰器279
13.2.3增强缓存装饰器280
13.2.4不引入Redis吗283
13.2.5继续演变我们的缓存逻辑284
13.2.6Django中的缓存配置284
13.2.7配置Redis缓存286
13.2.8应用场景和缓存的粒度287
13.2.9总结287
13.2.10参考资料288
13.3本章总结288
4章上线前的准备289
14.1你的代码如何为用户提供服务290
14.1.1整体结构290
14.1.2项目部署方案291
14.1.3系统架构292
14.1.4总结292
14.2标准化打包和自动化部署292
14.2.1配置项目的setup.py293
14.2.2sdist与bdist_wheel295
14.2.3配置内部PyPI服务器296
14.2.4自动化部署298
14.2.5编写fabfile配置299
14.2.6总结303
14.2.7参考资料304
14.3在生产环境中运行项目304
14.3.1为什么需要使用Gunicorn304
14.3.2Gunicorn简介305
14.3.3使用Gunicorn306
14.3.4Supervisor介绍307
14.3.5自动化部署和supervisord310
14.3.6setup.py和requirements.txt311
14.3.7配置正式settings312
14.3.8静态文件处理315
14.3.9总结315
14.3.10参考资料315
14.4配置Nginx315
14.4.1Nginx介绍315
14.4.2为什么使用Nginx316
14.4.3配置Nginx318
14.4.4总结320
14.4.5参考资料320
14.5常用的监控方式320
14.5.1实时监控320
14.5.2统计分析321
14.5.3业务监控(埋点统计)322
14.5.4总结322
14.6试试你的系统能抗多少请求322
14.6.1计算系统承载量322
14.6.2反推一下324
14.6.3压力测试324
14.6.4压测工具介绍324
14.6.5完全模拟真实流量326
14.6.6缓存加速访问327
14.6.7总结328
14.6.8参考资料328
14.7本章总结328
5章升级到Django 2.0329
15.1Django 2.x——Python 2时代的逝去329
15.2轻松升级到Django 2.0330
15.2.1几个重要的变化330
15.2.2第三方库的升级331
15.2.3总结331
15.3本章总结332
6章最后总结333
16.1技术栈总结333
16.1.1技术栈列表333
16.1.2总结334
16.2后续可实践方向334
16.2.1精于一点335
16.2.2持续滚动雪球335
16.3Django Web开发技术栈清单336
16.3.1Python基础336
16.3.2Django基础336
16.3.3Django进阶338
16.3.4部署相关338
16.3.5MySQL数据库339
16.3.6Redis339
16.3.7常用算法339
16.3.8总结339
16.4最后340
附录A使用Fabric 2.0341
附录B使用uWSGI来启动Django程序347
附录CSentry安装和配置350
附录D评论验证码功能354
附录E通过signal来解耦代码358
附录F实现文章置顶的几种方案363
附录G以腾讯云为例演示部署流程365