书海网短评:
Django是一个功能强大的PythonWeb框架,支持快速开发过程以及简洁、实用的设计方案。无论是对于初学者还是专家级程序员,这一特点颇具吸引力。本书将引领读者学习专业Web应用程序的开发流程。除了框架知识之
Django是一个功能强大的PythonWeb框架,支持快速开发过程以及简洁、实用的设计方案。无论是对于初学者还是专家级程序员,这一特点颇具吸引力。
《Django项目实例精解(第2版)》将引领读者学习专业Web应用程序的开发流程。除了框架知识之外,《Django项目实例精解(第2版)》还将讲解如何将其他较为流行的技术整合至Django项目中。
《Django项目实例精解(第2版)》将讨论真实应用程序的构建过程、常见问题的处理,并逐步实现多种佳实践方案。
在阅读完《Django项目实例精解(第2版)》后,读者将能够理解Django2.0的工作方式,以及如何打造具有实用性的高级Web应用程序。
《Django项目实例精解(第2版)》详细阐述了与Django开发相关的基本解决方案,主要包括构建博客应用程序、利用高级特性完善博客程序、扩展博客应用程序、构建社交型网站、共享网站中的内容、跟踪用户活动、构建在线商店、管理支付操作和订单、扩展在线商店应用程序、打造网络教学平台、显示和缓存内容、构建API、部署项目等内容。此外,《Django项目实例精解(第2版)》还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
《Django项目实例精解(第2版)》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
目录
第1章构建博客应用程序1
1.1安装Django1
1.1.1创建隔离的Python环境2
1.1.2利用pip安装Django3
1.2创建第一个项目3
1.2.1运行开发服务器5
1.2.2项目设置6
1.2.3项目和应用程序7
1.2.4创建应用程序8
1.3设计博客数据方案8
1.3.1激活应用程序10
1.3.2设置并使用迁移方案11
1.4针对模型创建管理站点12
1.4.1创建超级用户13
1.4.2Django管理站点13
1.4.3向管理站点中添加模型14
1.4.4定制模型的显示方式16
1.5与QuerySet和管理器协同工作18
1.5.1创建对象18
1.5.2更新对象19
1.5.3获取对象20
1.5.4删除对象21
1.5.5评估QuerySet21
1.5.6创建模型管理器22
1.6构建列表和详细视图22
1.6.1生成列表和视图23
1.6.2向视图添加URL路径24
1.6.3模型的标准URL25
1.7创建视图模板26
1.8添加分页机制29
1.9使用基于类的视图31
1.10本章小结33
第2章利用高级特性完善博客程序35
2.1通过电子邮件共享帖子35
2.1.1利用Django创建表单35
2.1.2处理视图中的表单36
2.1.3利用Django发送邮件38
2.1.4显示模板中的视图40
2.2构建评论系统44
2.2.1创建模型中的表单46
2.2.2处理视图中的ModelForms46
2.2.3向帖子详细模板中添加评论48
2.3添加标签功能51
2.4根据相似性检索帖子57
2.5本章小结59
第3章扩展博客应用程序61
3.1创建自定义模板标签和过滤器61
3.1.1创建自定义模板标签61
3.1.2创建自定义模板过滤器66
3.2向站点添加网站地图68
3.3创建帖子提要72
3.4向博客中添加全文本搜索功能74
3.4.1安装PostgreSQL74
3.4.2简单的查询操作76
3.4.3多字段搜索76
3.4.4构建搜索视图77
3.4.5对结果提取和排名79
3.4.6加权查询80
3.4.7利用三元相似性进行搜索81
3.4.8其他全文本搜索引擎82
3.5本章小结82
第4章构建社交型网站83
4.1设计社交型网站83
4.2使用Django验证框架84
4.2.1构建登录视图85
4.2.2使用Django验证视图90
4.2.3登录和注销视图91
4.2.4修改密码视图96
4.2.5重置密码视图98
4.3用户注册和用户配置103
4.3.1用户注册103
4.3.2扩展用户模型107
4.3.3使用消息框架112
4.4构建自定义验证后端114
4.5向站点中添加社交网站验证116
4.5.1基于Facebook的验证118
4.5.2基于Twitter的验证123
4.5.3基于Google的验证125
4.6本章小结128
第5章共享网站中的内容129
5.1构建图像书签网站129
5.1.1构建图像模型130
5.1.2生成多对多关系131
5.1.3在管理站点中注册图像模型132
5.2发布其他站点中的内容132
5.2.1清空表单字段133
5.2.2覆写ModelForm的save()方法134
5.2.3利用jQuery构建书签工具138
5.3创建图像的细节视图147
5.4利用sorl-thumbnail生成图像缩略图149
5.5利用jQuery添加AJAX操作150
5.5.1加载jQuery151
5.5.2AJAX请求中的跨站点请求伪造152
5.5.3利用jQuery执行AJAX请求153
5.6针对视图创建自定义装饰器156
5.7向列表视图中添加AJAX分页机制158
5.8本章小结162
第6章跟踪用户活动163
6.1构建关注系统163
6.1.1利用中间模型创建多对多关系163
6.1.2针对用户配置创建列表和详细视图166
6.1.3构建AJAX视图以关注用户171
6.2构建通用活动流应用程序173
6.2.1使用contenttypes框架174
6.2.2向模型中添加通用关系175
6.2.3避免活动流中的重复内容178
6.2.4向活动流中添加用户活动179
6.2.5显示活动流180
6.2.6优化涉及关系对象的QuerySet181
6.2.7针对操作活动创建模板182
6.3利用信号实现反规范化计数184
6.3.1与信号协同工作184
6.3.2应用程序配置类186
6.4利用Redis存储数据项视图188
6.4.1安装Redis188
6.4.2结合Python使用Redis190
6.4.3将数据视图存储于Redis中191
6.4.4将排名结果存储于数据库中192
6.4.5Redis特性195
6.5本章小结195
第7章构建在线商店197
7.1创建在线商店项目197
7.1.1创建商品目录模型198
7.1.2注册站点上的目录模型200
7.1.3构建目录视图201
7.1.4生成目录模板204
7.2创建购物车208
7.2.1使用Django会话208
7.2.2会话设置209
7.2.3会话过期210
7.2.4将购物车存储于会话中210
7.2.5创建购物车视图214
7.2.6针对购物车创建上下文处理器221
7.3注册客户订单223
7.3.1创建订单模型224
7.3.2在管理站点中包含订单模型225
7.3.3创建自定义订单227
7.4利用Celery启动异步任务231
7.4.1安装Celery231
7.4.2安装RabbitMQ231
7.4.3向项目中添加Celery232
7.4.4向应用程序中添加异步任务233
7.4.5监视Celery235
7.5本章小结235
第8章管理支付操作和订单237
8.1整合支付网关237
8.1.1创建Braintree沙箱账号237
8.1.2安装BraintreePython模块239
8.1.3集成支付网关239
8.1.4支付的测试操作247
8.1.5注意事项249
8.2将订单导出为CSV文件249
8.3利用自定义视图扩展管理站点252
8.4动态生成PDF发票257
8.4.1安装WeasyPrint257
8.4.2创建PDF模板257
8.4.3显示PDF文件258
8.4.4通过电子邮件发送PDF文件262
8.5本章小结263
第9章扩展在线商店应用程序265
9.1创建优惠券系统265
9.1.1构建优惠券模型266
9.1.2在购物车中使用优惠券268
9.1.3在订单中使用优惠券274
9.2添加国际化和本地化机制276
9.2.1Django的国际化处理276
9.2.2项目的国际化278
9.2.3翻译Python代码279
9.2.4翻译模板285
9.2.5使用Rosetta289
9.2.6模糊翻译291
9.2.7国际化操作的URL路径292
9.2.8切换语言294
9.2.9利用django-parler翻译模块295
9.2.10本地化格式303
9.2.11使用django-localflavor验证表单字段304
9.3构建推荐引擎305
9.4本章小结313
第10章打造网络教学平台315
10.1设置网络教学项目315
10.2构建课程模型316
10.2.1在管理站点中注册模型318
10.2.2使用固定文件提供模型的初始数据319
10.3创建包含多样化内容的模型321
10.3.1使用模型继承机制322
10.3.2创建内容模型324
10.3.3创建自定义模型字段326
10.3.4向模块和内容对象中添加顺序机制328
10.4创建CMS332
10.4.1添加验证系统333
10.4.2创建验证模板333
10.4.3设置基于类的模板336
10.4.4针对基于类的视图使用混合类337
10.4.5分组和权限339
10.5管理课程模块和内容346
10.5.1针对课程模块使用表单346
10.5.2向课程模块中添加内容350
10.5.3管理模块和内容355
10.5.4对模块和内容重排序360
10.6本章小结363
第11章显示和缓存内容365
11.1显示课程365
11.2添加学生注册机制370
11.2.1创建学生注册视图370
11.2.2注册课程373
11.3访问课程内容376
11.4使用缓存框架382
11.4.1有效的缓存后端383
11.4.2安装Memcached383
11.4.3缓存设置384
11.4.4向项目中添加Memcached385
11.4.5缓存级别386
11.4.6使用底层缓存API386
11.4.7缓存模板片段389
11.4.8缓存视图390
11.5本章小结392
第12章构建API393
12.1构建RESTfulAPI393
12.1.1安装DjangoREST框架393
12.1.2定义序列化器394
12.1.3理解解析器和渲染器395
12.1.4构建列表和详细视图396
12.1.5嵌套序列化器399
12.1.6构建自定义视图400
12.1.7处理授权问题401
12.1.8向视图中添加授权机制402
12.1.9创建视图集合路由器404
12.1.10向视图集添加附加操作405
12.1.11创建自定义授权406
12.1.12序列化课程内容406
12.2本章小结409
第13章部署项目411
13.1生成产品环境411
13.1.1针对多种环境管理设置内容411
13.1.2使用PostgreSQL414
13.1.3项目检查414
13.1.4通过WSGI为Django提供服务415
13.1.5安装uWSGI415
13.1.6配置uWSGI415
13.1.7安装NGINX417
13.1.8产品环境418
13.1.9配置NGINX418
13.1.10向静态和媒体数据集提供服务420
13.1.11基于SSL的安全连接421
13.2创建自定义中间件423
13.2.1创建子域名中间件424
13.2.2利用NGINX向多个子域名提供服务426
13.3实现自定义管理命令426
13.4本章小结429
前言
Django是一个功能强大的PythonWeb框架,支持快速开发过程以及简洁、实用的设计方案。无论是对于初学者还是专家级程序员,这一特点颇具吸引力。
《Django项目实例精解(第2版)》将引领读者学习专业Web应用程序的开发流程。除了框架知识之外,《Django项目实例精解(第2版)》还将讲解如何将其他较为流行的技术整合至Django项目中。
《Django项目实例精解(第2版)》将讨论真实应用程序的构建过程、常见问题的处理,并逐步实现多种最佳实践方案。
在阅读完《Django项目实例精解(第2版)》后,读者将能够理解Django的工作方式,以及如何打造具有实用性的高级Web应用程序。
适用读者
《Django项目实例精解(第2版)》是针对具备一定的Python知识,同时希望以一种实用的方式学习Django的读者而准备的。或许,Django对于读者来说是一项全新的事物;抑或,读者对此稍有了解且希望进一步学习Django。通过打造实用的开发项目,《Django项目实例精解(第2版)》可帮助读者掌握大部分架构知识。另外,《Django项目实例精解(第2版)》要求读者对某些编程概念有所了解,同时具备一些HTML和JavaScript方面的知识。
《Django项目实例精解(第2版)》内容
第1章通过编写博客应用程序向读者介绍框架知识。其间,我们将构建基本的博客模型、视图、模板以及URL以显示博客内容。另外,读者还将学习如何利用DjangoORM构建QuerySets,并配置Django管理网站。
第2章将讨论如何处理表单问题、利用Django发送邮件以及第三方应用程序的整合操作。读者将尝试实现博客的评论系统,并通过电子邮件共享帖子内容。此外,本章还将讨论标签系统的构建处理过程。
第3章将介绍如何创建自定义模板标签和过滤器。除此之外,本章还将展示如何使用网站地图框架,并对帖子构建博客订阅功能。最后,通过PostgreSQL的全文本搜索功能构建搜索引擎,我们将完善博客应用程序。
第4章讨论如何构建社交网站,并使用Django身份验证框架构建用户的账户视图。另外,本章还将了解如何使用社交网络创建自定义用户配置文件模型,并将身份验证机制应用到项目中去。
第5章将讨论如何将社交应用程序转换为图像书签站点。其中,我们将针对模型定义多对多的关系,在JavaScript中创建一个AJAX书签,并将其集成到项目中。本章还进一步展示了如何生成图像缩略图和为视图创建自定义装饰器。
第6章介绍如何针对用户构建跟踪系统,并通过创建用户活动流应用程序完成图像书签站点,以及如何优化QuerySets并与信号协同工作。同时,本章还将Redis整合至项目中,以对图像视图进行计数。
第7章将讨论如何构建一个在线商店,其中包括目录模型、基于Django会话的购物车(并对此设置上下文处理器),以及通过Celery向用户发送异步通知。
第8章讨论如何将支付网关整合至在线商店中。除此之外,还将定制管理站点以将订单导出到CSV文件中,并动态生成PDF发票。
第9章将讨论如何创建优惠券系统并使用折扣订单。同时,本章还展示了如何在项目中实现国际化机制以及如何转换模型。此外,还将使用Redis构建一个产品推荐引擎。
第10章将设计一个电子教育平台,并向项目中添加某些固件、使用模型继承机制、设置自定义模型字段、使用类视图,以及管理分组和权限。此外,我们还将打造一个内容管理系统并处理表单集。
第11章将尝试构建一个学生注册系统,并管理学生的课程注册行为。该系统将显示不同的课程内容,同时还将学习如何使用缓存框架。
第12章将采用DjangoREST框架,进而针对项目构建RESTfulAPI。
第13章讨论如何通过uWSGI和NGINX设置产品环境,并利用SSL解决安全问题。此外,本章还解释了如何构建自定义中间件以及自定义管理命令。
背景知识
当阅读《Django项目实例精解(第2版)》时,建议读者具备一定的Python知识,并熟悉HTML以及JavaScript。另外,在阅读《Django项目实例精解(第2版)》之前,建议读者阅读Django官方文档的1~3部分,对应网址为https://docs.djangoproject.com/en/2.0/intro/tutorial01/。
资源下载
读者可访问http://www.packtpub.com并通过个人账户下载示例代码文件。在http://www.packtpub.com/support网站注册成功后,我们将以电子邮件的方式将相关文件发与读者。
读者可根据下列步骤下载代码文件:
(1)登录www.packtpub.com并在网站注册。
(2)选择Support选项卡。
(3)单击CODEDOWNLOADS&ERRATA。
(4)在Search文本框中输入书名并执行后续命令。
当文件下载完毕后,确保使用下列最新版本软件解压文件夹:
?Windows系统下的WinRAR/7-Zip。
?Mac系统下的Zipeg/iZip/UnRarX。
?Linux系统下的7-Zip/PeaZip。
另外,读者还可访问GitHub获取《Django项目实例精解(第2版)》的代码包,对应网址为https://github.com/PacktPublishing/Django-2-by-Example。
此外,读者还可访问https://github.com/PacktPublishing/网站,以了解丰富的代码和视频资源。
《Django项目实例精解(第2版)》约定
代码块则通过下列方式设置:
fromdjango.contribimportadmin
from.modelsimportPost
admin.site.register(Post)
代码中的重点内容则采用黑体表示:
INSTALLED_APPS=[
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig',
]
命令行输入或输出如下所示:
$pythonmanage.pystartappblog
图标表示较为重要的说明事项。
图标则表示提示信息和操作技巧。
读者反馈和客户支持
欢迎读者对《Django项目实例精解(第2版)》提出建议或意见并予以反馈。
对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。若读者对《Django项目实例精解(第2版)》有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。
勘误表
尽管我们希望做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub.com/submit-errata,选取对应书籍,输入并提交相关问题的详细内容。
版权须知
一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现《Django项目实例精解(第2版)》任意形式的副本,请告知我们网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件至copyright@packtpub.com。
若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可访问。
问题解答
若读者对《Django项目实例精解(第2版)》有任何疑问,均可发送邮件,我们将竭诚为您服务。









