Django是一款高性能的Python Web开发框架,本书全面讲解Django开发相关的内容。本书共分为24章,主要内容包括Python Web开发的基础知识、Django项目实战、使用Django开发API、Django系统运维等部分,其中基础知识部分讲解Python基础知识、各种常用的数据结构、正则表达式、HTTP协议、字符串编码等;实战开发部分讲解两个具体的项目,从功能需求设计、模块划分,再到*终的编码实现,手把手教你如何从零打造一个自己的项目;Django系统运维部分讲解如何线上部署一个系统、需要掌握的基础知识、使用的每个组件的作用,让读者明白其中的原理,出现问题之后如何排查。
Python简单易学、上手快速,成为很多程序员喜爱的编程语言。使用Python进行Web应用开发,无疑能够加快需求实现的速度,快速迭代和验证产品的原型。有些人可能会有疑问:Python性能不够好,用来开发Web是不是不太合适?Python在性能上确实无法和C、Java等语言相比,但在大部分情况下使用Python开发是可以满足性能需求的,并且很多时候程序性能不够好,这不是语言本身的问题,而是架构设计、缓存设计、数据结构算法的选用以及开发人员编程水平等引起的问题。总之,使用Python语言进行Web开发有独特的优势,通常能满足大部分应用场景的需求。
本书面向想学习Python Web开发的读者,分5篇讲解基础知识和实战。
第1篇是基础知识,让读者对Python语言中各种常用的数据结构及其算法有一定的了解,同时介绍常见数据结构算法的时间复杂度,让读者从学习之初就有性能的意识,为将来编写出高质量的优秀代码打下基础。本篇还对开发过程中会用到的相关知识点(比如正则表达式、HTTP协议、字符串编码等)进行讲解,让读者对Python Web开发有一个全面的认识。特别是对容易让初学者困惑的知识,比如绝对路径和相对路径的区别、字符编码相关的内容,也进行了讲解。
第2篇和第3篇是实战部分,主要讲解“资源管理”和“个人博客系统”两个项目。从功能需求设计、模块划分,再到最终的编码实现,手把手教读者如何从零开始打造自己的项目。
第4篇是使用Django开发API,通过一个完整的教程,以逐步深入的方式,让读者享受使用Django Rest Framework进行API开发的乐趣。
第5篇是Django系统运维,让读者不仅能将服务部署好,而且还能明白各个组件的原理以及它们是如何在一起工作的,从而提高读者分析问题和解决问题的能力。最后讲解Django的一些常用功能,比如中间件、信号系统、缓存框架等,在讲解过程中会深入讲解它们的工作原理,以及使用中会遇到的一些“坑”。
本书的读者
如果对Python有一定的了解,想学习Python Web开发,本书会是一个不错的选择。
谁不适合读本书
不太适合一点Python基础都没有的人员。另外,如果你已经是Python Web开发方面的专家,那么这本书对你来说价值应该也不大。
勘误与反馈
本书所有章节中的源代码放在https://github.com/djangobook-cn/book-code上,欢迎读者从GitHub下载并提出问题(issue),如果下载有问题,可以通过邮箱booksaga@126.com与编者联系。
致谢
在编写本书时,笔者得到了各个方面非常多的建议、帮助和鼓励,在此深表感谢。
首先,特别感谢武汉大学的谭建扬同学认真细心地测试了书中的示例,指出了很多问题。
感谢研究生实验室中三位计算机专业的同学江超、张浩然和杨骁,这三位不仅仅是研究生期间的“战友”,也在我们编写本书期间给出了不少建议。
感谢赵军出色的核对工作,提出了非常多的改进意见。
最后,占用了大量周末时间来写作,这和妻子lotus的大力支持是分不开的。
涂伟忠
序(一)
序(二)
前言
第1篇 基础知识
第1章 Django简介3
1.1 Django基本介绍3
1.2 Django发布情况4
1.3 Django的MVT架构简介5
1.3.1 MVC模式5
1.3.2 Django MVT模式5
1.4 Django和主流Web框架对比6
1.5 开发环境选择6
1.5.1 Windows平台7
1.5.2 Mac平台7
1.5.3 Linux平台8
第2章 掌握必要的基础知识 9
2.1 Web开发需要什么基础知识9
2.2 Python语言入门10
2.2.1 Python语言简介11
2.2.2 执行Python代码的方式11
2.2.3 Python中的缩进格式12
2.2.4 常见的运算符13
2.2.5 数据类型14
2.2.6 字符串14
2.2.7 列表15
2.2.8 元组19
2.2.9 字典19
2.2.10 集合21
2.2.11 数据类型的转换22
2.2.12 常见数据结构操作的时间复杂度23
2.2.13 选择语句与循环语句26
2.2.14 关于模块27
2.2.15 Python中的函数28
2.2.16 Python中的类30
2.2.17 命令行参数32
2.2.18 引用和复制一个对象32
2.2.19 常用内置函数33
2.2.20 常用模块的功能35
2.3 正则表达式37
2.3.1 正则表达式中的元字符37
2.3.2 正则模块的核心函数39
2.3.3 理解贪婪与非贪婪41
2.3.4 正则表达式中的Flag42
2.4 HTTP协议的基础知识43
2.5 绝对路径与相对路径47
2.6 Python中的字符串编码48
第3章 Django初步体验51
3.1 Django的请求和响应51
3.2 Django的模型和admin站点52
3.2.1 新建blog应用53
3.2.2 修改项目设置53
3.2.3 编写模型代码54
3.2.4 体验admin站点55
3.2.5 对admin站点进行简单定制58
3.3 初识 Django QuerySet62
3.3.1 基本查询63
3.3.2 添加记录64
3.3.3 修改记录65
3.3.4 删除记录65
3.4 Django的视图和函数65
第2篇 实践学习一:从一个简单的资源管理做起
第4章 需求的确定和项目排期规划75
4.1 产品定位75
4.2 功能需求的确定76
4.3 产品设计的确定77
4.4 产品实现的排期77
第5章 数据模型的设计与实现79
5.1 模型简介79
5.2 模型的数据字段79
5.2.1 数值类字段80
5.2.2 字符类字段80
5.2.3 布尔类字段81
5.2.4 日期时间类字段81
5.2.5 文件类字段82
5.2.6 IP地址类字段82
5.2.7 二进制类字段83
5.3 模型关系字段83
5.3.1 外键字段83
5.3.2 多对多字段83
5.3.3 一对一字段84
5.4 字段参数84
5.5 图书管理系统模型的实现85
5.6 数据库查询接口简介88
5.6.1 创建对象89
5.6.2 修改对象89
5.6.3 查找对象90
5.6.4 删除对象91
第6章 网站的入口——URL设计92
6.1 URL设计简介92
6.2 URL反转简介94
第7章 页面和功能的实现96
7.1 基本页面的实现96
7.2 Django模板语言简介101
7.3 Django用户认证和鉴权简介106
7.4 用户系统的实现109
7.4.1 用户注册功能的实现109
7.4.2 用户登录功能的实现115
7.4.3 用户注销功能的实现117
7.4.4 修改密码功能的实现118
7.5 图书管理相关功能的实现124
7.5.1 图书添加功能的实现124
7.5.2 图片上传功能的实现128
7.5.3 图书列表功能的实现131
7.5.4 图书详情功能的实现136
第3篇 实践学习二:从博客做起
第8章 个人博客网站的规划和设计141
8.1 功能需求的设计141
8.2 模块划分143
第9章 Django通用视图简介144
9.1 TemplateView简介144
9.2 RedirectView简介145
9.3 DetailView简介145
9.4 ListView简介146
9.5 FormView简介147
9.6 CreateView简介147
9.7 UpdateView简介147
9.8 DeleteView简介148
第10章 基本页面框架的实现149
10.1 前端页面框架的实现149
10.2 后端页面框架的实现154
第11章 用户系统和认证模块的实现158
11.1 同步数据库文件158
11.2 用户登录功能的实现158
11.3 用户注销功能的实现164
第12章 导航栏组件的实现165
12.1 导航栏数据模型的设计165
12.2 导航栏前端组件的实现166
12.3 导航栏管理页面的制作168
第13章 友情链接组件的实现180
13.1 友情链接数据模型的设计180
13.2 友情链接前端组件的实现181
13.3 友情链接管理页面的实现182
第14章 “碎碎念”组件的实现191
14.1 “碎碎念”数据模型的设计191
14.2 “碎碎念”前端组件的实现192
14.3 “碎碎念”组件管理页面的实现193
14.4 “碎碎念”前端TimeLine页面的实现205
第15章 文章组件的实现209
15.1 文章数据模型的设计209
15.2 文章分类前端组件的实现210
15.3 文章分类管理的页面212
15.4 文章管理页面218
15.5 文章前端组件的实现234
第4篇 使用Django开发API
第16章 序列化241
16.1 搭建一个新的开发环境241
16.2 开始编写Web API241
16.3 创建模型242
16.4 创建一个序列化类243
16.5 了解Serializers的工作方式244
16.6 使用ModelSerializers246
16.7 使用序列化器编写常规的视图247
16.8 测试Web API249
第17章 请求和响应251
17.1 Request对象251
17.2 Response对象251
17.3 响应状态码251
17.4 包装 API 视图252
17.5 使用新组件编写视图252
17.6 给URLs添加可选格式化后缀254
17.7 它看起来怎么样255
17.8 API可浏览性257
第18章 基于类的视图258
18.1 使用类视图重写API258
18.2 使用Mixins混入类260
18.3 使用通用类视图261
第19章 认证和权限263
19.1 模型类添加一些信息263
19.2 添加用户相关的API264
19.3 将Snippets和用户关联265
19.4 给API添加只读用户字段266
19.5 给视图添加必要的权限267
19.6 给可浏览API添加登录功能267
19.7 实现级别的权限268
19.8 通过API实现认证269
19.9 认证和权限总结270
第20章 关系和超链接API271
20.1 为API创建根视图271
20.2 添加高亮显示功能的视图271
20.3 链接API272
20.4 确保URL都命名274
20.5 添加分页功能275
20.6 页面上浏览API275
第21章 ViewSets和Routers276
21.1 使用ViewSets进行重构276
21.2 显式将URL和ViewSets绑定起来278
21.3 使用 Routers 自动化URL配置279
21.4 使用视图、视图集的利弊279
第5篇 Django系统运维
第22章 部署基础知识283
22.1 部署基础知识储备283
22.2 Linux进程分析284
22.3 Linux端口分析287
第23章 部署上线290
23.1 Django部署前的准备290
23.1.1 运行开发服务器进行测试290
23.1.2 安装Nginx290
23.2 使用uWSGI部署292
23.2.1 安装uWSGI软件292
23.2.2 使用 uWSGI运行项目292
23.3 使用supervisor管理进程293
23.3.1 安装supervisor软件包293
23.3.2 supervisor配置293
23.3.3 supervisor使用简介294
23.4 配置Nginx295
第24章 其他常见功能297
24.1 Django中间件297
24.1.1 工作原理297
24.1.2 激活中间件299
24.1.3 编写中间件300
24.1.4 其他中间件钩子301
24.2 Django信号简介303
24.2.1 信号机制简介303
24.2.2 监听信号304
24.2.3 自定义信号306
24.2.4 发送信号306
24.3 Django缓存框架308
24.3.1 缓存机制简介308
24.3.2 设置缓存308
24.3.3 网站缓存311
24.3.4 视图缓存311
24.3.5 模板分片缓存312
24.3.6 低层次缓存接口312
24.4 Django日志314
24.4.1 Django日志简介314
24.4.2 Django日志扩展314
24.4.3 Django默认日志配置315
24.5 Django发送邮件316
24.6 Django分页316