目 录
第1章 构建一个博客应用程序 1
1.1 安装Python 2
1.2 创建Python虚拟环境 2
1.3 安装Django 3
1.3.1 利用pip安装Django 4
1.3.2 Django 4中的新特性 4
1.4 Django概述 5
1.5 主框架组件 5
1.6 Django架构 5
1.7 创建第一个项目 6
1.7.1 应用初始数据库迁移 7
1.7.2 运行开发服务器 8
1.7.3 项目设置项 10
1.7.4 项目和应用程序 11
1.7.5 创建一个应用程序 12
1.8 创建博客数据模型 12
1.8.1 创建Post模型 13
1.8.2 添加日期时间字段 14
1.8.3 定义默认排序顺序 15
1.8.4 添加一个数据库索引 16
1.8.5 激活应用程序 17
1.8.6 添加一个status字段 17
1.8.7 添加多对一关系 20
1.8.8 创建并应用迁移 21
1.9 创建模型的管理网站 24
1.9.1 创建一个超级用户 24
1.9.2 Django管理网站 24
1.9.3 向管理网站中添加模型 25
1.9.4 定制模型的显示方式 27
1.10 与QuerySet和管理器协同工作 29
1.10.1 创建对象 30
1.10.2 更新对象 31
1.10.3 检索对象 31
1.10.4 删除对象 32
1.10.5 QuerySet何时取值 33
1.10.6 创建模型管理器 33
1.11 构建列表和详细视图 35
1.11.1 创建列表和详细视图 35
1.11.2 使用get_object_or_404快捷方式 36
1.11.3 添加视图的URL模式 37
1.12 创建视图的模板 38
1.12.1 创建基础模板 39
1.12.2 创建帖子列表模板 40
1.12.3 访问应用程序 41
1.12.4 创建帖子详细模板 41
1.13 请求/响应循环 42
1.14 附加资源 43
1.15 本章小结 44
第2章 利用高级特性增强博客应用程序 45
2.1 使用模型的标准URL 45
2.2 创建帖子的SEO友好的URL 48
2.3 调整URL模式 49
2.4 调整视图 50
2.5 调整帖子的标准URL 50
2.6 添加分页 51
2.6.1 向帖子列表视图中添加分页 52
2.6.2 创建一个分页模板 52
2.6.3 处理分页错误 55
2.7 构建基于类的视图 58
2.7.1 为何采用基于类的视图 59
2.7.2 使用基于类的视图列出帖子 59
2.8 基于电子邮件的推荐帖子 61
2.8.1 利用Django创建表单 61
2.8.2 处理视图中的表单 63
2.8.3 利用Django发送电子邮件 64
2.8.4 在视图中发送电子邮件 68
2.8.5 在模板中渲染表单 70
2.9 创建一个评论系统 74
2.9.1 创建一个评论模型 74
2.9.2 向管理网站中添加评论 76
2.9.3 从模型中创建表单 77
2.9.4 在视图中处理ModelForms 78
2.9.5 创建评论表单的模板 80
2.9.6 向帖子详细视图中添加评论 82
2.9.7 向帖子详细模板中添加评论 83
2.10 附加资源 89
2.11 本章小结 90
第3章 扩展博客应用程序 91
3.1 添加标签功能 91
3.2 根据相似性检索帖子 100
3.3 创建自定义模板标签和过滤器 105
3.3.1 实现自定义模板标签 105
3.3.2 创建一个简单的模板标签 106
3.3.3 创建一个包含模板标签 108
3.3.4 创建返回QuerySet的模板标签 109
3.3.5 实现自定义模板过滤器 112
3.3.6 创建模板过滤器以支持Markdown语法 112
3.4 向网站中添加网站地图 117
3.5 创建博客帖子的订阅源 121
3.6 向博客中添加全文本搜索 128
3.6.1 安装PostgreSQL 129
3.6.2 创建PostgreSQL数据库 129
3.6.3 转储现有的数据 130
3.6.4 切换项目中的数据库 131
3.6.5 将数据加载至新数据库中 132
3.6.6 简单的搜索查询 133
3.6.7 针对多个字段搜索 134
3.6.8 构建一个搜索视图 134
3.6.9 词干和排名结果 138
3.6.10 不同语言中的词干提取和移除停用词 139
3.6.11 加权查询 140
3.6.12 使用三元组相似性进行搜索 140
3.7 附加资源 142
3.8 本章小结 143
第4章 构建社交网站 145
4.1 创建社交网站项目 145
4.2 使用Django身份验证框架 147
4.2.1 创建一个登录视图 148
4.2.2 使用Django身份验证视图 154
4.2.3 登录和注销视图 155
4.2.4 修改密码视图 160
4.2.5 重置密码视图 163
4.3 用户注册和用户个人信息 170
4.3.1 用户注册 170
4.3.2 扩展用户模型 176
4.3.3 安装Pillow并处理媒体文件 177
4.3.4 创建资料模型的迁移 178
4.2.5 使用消息框架 184
4.4 构建自定义身份验证后端 187
4.5 附加资源 191
4.6 本章小结 192
第5章 实现社交身份验证 193
5.1 向网站中添加社交身份验证 193
5.1.1 通过HTTPS运行开发服务器 196
5.1.2 利用Facebook进行身份验证 199
5.1.3 利用Twitter进行身份验证 206
5.1.4 使用Google进行身份验证 215
5.1.5 为注册社交认证的用户创建资料文件 223
5.2 附加资源 225
5.3 本章小结 226
第6章 共享网站上的内容 227
6.1 创建一个图像收藏网站 227
6.1.1 构建图像模型 228
6.1.2 创建多对多关系 230
6.1.3 在管理网站注册图像模型 231
6.2 从其他网站上发布内容 231
6.2.1 清除表单字段 232
6.2.2 安装Requests库 233
6.2.3 覆写ModelForm的ave()方法 233
6.2.4 利用JavaScript构建书签工具 238
6.3 创建图像的详细视图 250
6.4 利用easy-thumbnails创建图像的缩略图 253
6.5 利用JavaScript添加异步动作 255
6.5.1 在DOM上加载JavaScript 257
6.5.2 JavaScript中HTTP请求的跨站点请求伪造 258
6.5.3 利用JAvaScript实现HTTP请求 259
6.6 向图像列表中添加无限滚动分页机制 265
6.7 附加资源 271
6.8 本章小结 272
第7章 跟踪用户动作 273
7.1 构建关注系统 273
7.1.1 利用中间模型创建多对多关系 274
7.1.2 创建用户资料的列表和详细视图 277
7.1.3 利用JavaScript添加关注/取消关注动作 282
7.2 构建通用的活动流应用程序 284
7.2.1 使用contenttypes框架 285
7.2.2 向模型中添加通用关系 286
7.2.3 避免活动流中的重复动作 289
7.2.4 向活动流中添加用户动作 291
7.2.5 显示活动流 293
7.2.6 优化涉及关联对象的QuerySet 294
7.2.7 创建动作模板 296
7.3 针对反规范化计数使用信号 298
7.3.1 与信号协同工作 298
7.3.2 应用程序配置类 301
7.4 使用Django Debug Toolbar 303
7.4.1 安装Django Debug Toolbar 303
7.4.2 Django Debug Toolbar 305
7.4.3 Django Debug Toolbar命令 308
7.5 利用Redis计数图像视图 309
7.5.1 安装Docker 310
7.5.2 安装Redis 310
7.5.3 通过Python使用Redis 312
7.5.4 将图像视图存储于Redis中 313
7.5.5 将排名存储于Redis中 315
7.5.6 Redis适用场景 317
7.6 附加资源 318
7.7 本章小结 319
第8章 构建在线商店 321
8.1 创建在线商店项目 321
8.1.1 创建商品目录模型 322
8.1.2 在管理网站上注册目录模型 326
8.1.3 构建目录视图 328
8.1.4 创建目录模板 330
8.2 构建购物车 335
8.2.1 使用Django会话 335
8.2.2 会话设置 336
8.2.3 会话过期 337
8.2.4 将购物车存储至会话中 337
8.2.5 创建购物车视图 341
8.2.6 针对当前购物车创建上下文处理器 349
8.3 注册客户订单 352
8.3.1 创建订单模型 352
8.3.2 在管理网站中包含订单模型 354
8.3.3 创建自定义表单 355
8.4 异步任务 360
8.4.1 与异步任务协同工作 361
8.4.2 worker、消息队列和消息代理 361
8.5 附加资源 371
8.6 本章小结 371
第9章 管理支付和订单 373
9.1 集成支付网关 373
9.1.1 创建Stripe账户 374
9.1.2 安装Stripe Python库 376
9.1.3 向项目中添加Stripe 377
9.1.4 构建支付处理过程 378
9.1.5 测试结算过程 387
9.1.6 使用webhook接收支付通知 394
9.1.7 在订单中引用Stripe支付 401
9.2 将订单导出为CSV文件 405
9.3 利用自定义视图扩展管理网站 408
9.4 以动态方式生成PDF发票 413
9.4.1 安装WeasyPrint 413
9.4.2 创建PDF模板 413
9.4.3 渲染PDF文件 414
9.4.4 通过电子邮件发送PDF文件 418
9.5 附加资源 421
9.6 本章小结 422
第10章 扩展商店 423
10.1 创建优惠券系统 423
10.1.1 构建优惠券系统 424
10.1.2 将优惠券应用于购物车上 427
10.1.3 将优惠券应用于订单上 434
10.1.4 针对Stripe Checkout创建优惠券 439
10.1.5 将优惠券添加至订单和PDF发票中 441
10.2 构建推荐引擎 444
10.3 附加资源 452
10.4 本章小结 453
第11章 向商店中添加国际化功能 455
11.1 基于Django的国际化 455
11.1.1 国际化和本地化设置 456
11.1.2 国际化管理命令 457
11.1.3 安装gettext工具集 457
11.1.4 如何向Django项目中添加翻译 457
11.1.5 Django如何确定当前语言 457
11.2 准备项目以实现国际化 458
11.3 翻译Python代码 459
11.3.1 标准翻译 460
11.3.2 延迟翻译 460
11.3.3 变量翻译 460
11.3.4 翻译中的复数形式 460
11.3.5 翻译自己的代码 461
11.4 翻译模板 465
11.4.1 {% trans %}模板标签 465
11.4.2 {% blocktrans %}模板标签 465
11.4.3 翻译shop模板 466
11.5 使用Rosetta翻译界面 470
11.6 模糊翻译 472
11.7 国际化的URL模式 473
11.7.1 向URL模式中添加语言前缀 473
11.7.2 翻译URL模式 474
11.8 允许用户切换语言 478
11.9 利用django-parler翻译模型 480
11.9.1 安装django-parler 480
11.9.2 翻译模型字段 481
11.9.3 将翻译集成至管理网站中 483
11.9.4 创建模型翻译的迁移 484
11.9.5 结合ORM使用翻译 486
11.9.6 调整翻译视图 487
11.10 本地化格式 489
11.11 使用django-localflavor验证表单字段 490
11.12 附加资源 491
11.13 本章小结 492
第12章 构建在线学习平台 493
12.1 设置在线学习项目 493
12.2 服务于媒体文件 494
12.3 构建course模块 495
12.3.1 在管理网站中注册模型 498
12.3.2 使用fixture提供模型的初始数据 498
12.4 针对多态内容创建模型 501
12.4.1 使用模型继承 502
12.4.2 创建Content模型 504
12.4.3 创建自定义模型字段 506
12.4.4 向模块和内容对象中添加顺序 508
12.5 添加身份验证视图 512
12.5.1 添加身份验证系统 512
12.5.2 创建身份验证模板 513
12.6 附加资源 516
12.7 本章小结 517
第13章 创建内容管理系统 519
13.1 创建CMS 519
13.1.1 创建基于类的视图 519
13.1.2 针对基于类的视图使用混入 520
13.1.3 与分组和权限协同工作 522
13.2 管理课程模块及其内容 530
13.2.1 对课程模块使用表单集 530
13.2.2 向课程模块添加内容 534
13.2.3 管理模块及其内容 539
13.2.4 重新排序模块及其内容 544
13.3 附加资源 552
13.4 本章小结 553
第14章 渲染和缓存内容 555
14.1 显示课程 555
14.2 添加学生注册信息 561
14.2.1 创建学生的注册视图 561
14.2.2 注册课程 564
14.3 访问课程内容 567
14.4 使用缓存框架 573
14.4.1 有效的缓存后端 573
14.4.2 安装Memcached 574
14.4.3 安装Memcached Docker镜像 574
14.4.4 安装Memcached Python绑定 574
14.4.5 Django缓存设置项 575
14.4.6 将Memcached添加至项目中 575
14.4.7 缓存级别 576
14.4.8 使用低级别的缓存API 576
14.4.9 利用Django Debug Toolbar检查缓存请求 578
14.4.10 基于动态数据的缓存 581
14.4.11 缓存模板片段 582
14.4.12 缓存视图 583
14.4.13 使用逐站点缓存 583
14.4.14 使用Redis缓存后端 585
14.4.15 利用Django Redisboard监视Redis 585
14.5 附加资源 587
14.6 本章小结 588
第15章 构建API 589
15.1 构建RESTful API 589
15.1.1 安装Django REST框架 590
15.1.2 定义序列化器 591
15.1.3 理解解析器和渲染器 592
15.1.4 构建列表和详细视图 593
15.1.5 使用API 594
15.1.6 创建嵌套的序列化器 596
15.1.7 构建自定义API视图 598
15.1.8 处理身份验证 599
15.1.9 向视图中添加权限 600
15.1.10 构建ViewSet和路由器 601
15.1.11 向ViewSet添加附加动作 603
15.1.12 创建自定义权限 604
15.1.13 序列化课程内容 604
15.1.14 使用RESTful API 607
15.2 附加资源 609
15.3 本章小结 610
第16章 构建聊天服务器 611
16.1 创建聊天应用程序 611
16.2 基于Channels的实时Django 614
16.2.1 基于ASGI的异步应用程序 615
16.2.2 基于Channels的请求/响应循环 615
16.3 安装Channels 617
16.4 编写使用者 619
16.5 路由机制 620
16.6 实现WebSocket客户端 621
16.7 启用通道层 628
16.7.1 通道和分组 628
16.7.2 利用Redis设置通道层 628
16.7.3 更新使用者并广播消息 629
16.7.4 向消息中添加上下文 634
16.8 将使用者调整为全异步 637
16.9 将聊天室应用程序与现有视图集成 639
16.10 附加资源 640
16.11 本章小结 640
第17章 生产环境 641
17.1 创建生产环境 641
17.1.1 针对多个环境管理设置项 642
17.1.2 本地环境设置项 643
17.1.3 运行本地环境 643
17.1.4 生产环境设置项 644
17.2 使用Docker Compose 645
17.2.1 安装Docker Compose 645
17.2.2 创建Dockerfile 646
17.2.3 添加Python需求条件 647
17.2.4 创建Docker Compose 648
17.2.5 配置PostgreSQL服务 651
17.2.6 应用数据库迁移并创建超级用户 654
17.2.7 配置Redis服务 654
17.3 利用WSGI和NGINX服务于Django 656
17.3.1 使用uWSGI 656
17.3.2 配置uWSGI 657
17.3.3 使用NGINX 658
17.3.4 配置NGINX 659
17.3.5 使用主机名 661
17.3.6 服务于静态和媒体数据资源 662
17.4 基于SSL/TLS的站点的安全 665
17.4.1 针对生产环境检查项目 665
17.4.2 针对SSL/TLS配置Django项目 666
17.4.3 生成SSL/TLS证书 667
17.4.4 配置NGINX以使用SSL/TLS 667
17.4.5 将HTTP流量重定向至HTTPS 670
17.5 针对Django Channels使用Daphne 671
17.5.1 针对WebSocket使用安全的连接 673
17.5.2 在NGINX配置中包含Daphne 673
17.6 创建自定义中间件 676
17.6.1 创建子域中间件 677
17.6.2 利用NGINX服务于多个子域 678
17.7 实现自定义管理命令 679
17.8 附加资源 681
17.9 本章小结 683