前 言
Django是一个开源的Python Web框架,旨在实现快速开发和简洁、实用的设计。 Django简化了开发过程,并为初学者提供了相对友好的学习曲线。Django遵循Python的“内置电池”哲学,提供了一组丰富而通用的模块,可以解决较为常见的Web开发问题。Django的简单性连同其功能强大的特性对于初学者和专家级程序员来说均颇具吸引力。Django的设计注重简单性、灵活性、可读性和可扩展性。
当今,Django被无数初创公司和大型组织使用,如Instagram、Spotify、Pinterest、Udemy、Robinhood和Coursera。在过去的几年里,在Stack Overflow的年度开发者调查中,Django一直被全世界的开发者选为最受欢迎的Web框架之一,这并非巧合。
本书将引领读者了解利用Django开发专业Web应用程序的整体过程,通过多个项目解释Django Web框架的工作方式,其中涉及与框架自身相关的内容,同时还阐述Django的各种应用方式。
本书内容不仅涵盖Django,还包含其他一些常见技术,如PostgreSQL、Redis、Celery、RabbitMQ和Memcached。读者通过本书可学会将这些技术集成至Django项目中,进而创建高级功能并构建复杂的Web应用程序。
本书将引领读者使用易于遵循的循序渐进的方法,创建真实的应用程序、处理常见的问题并获取最佳实现方案。
在阅读完本书后,读者将能够较好地理解Django的工作方式以及如何构建高级的Python Web应用程序。
适用读者
本书可作为刚刚接触Django的程序员的入门书籍,并可供拥有Python知识且希望以实用的方式学习Django的开发人员使用。对于Django新手,本书将从零开始构建实际项目以使读者掌握Django框架的重要内容。阅读本书时,读者需要熟悉一些编程概念,除了基本的Python知识,读者还应具备HTML和JavaScript方面的知识。
本书内容
本书涵盖了Django Web应用程序开发方面的诸多主题,进而构建4个不同的全功能的Web应用程序,全部内容分为17章。
? 博客(blog)应用程序(第1~3章)。
? 图像收藏网站(第4~7章)。
? 在线商店(第8~11章)。
? 在线学习平台(第12~17章)。
其中,每章包含多个Django特性。
第1章将通过一个博客应用程序介绍Django框架。其间,我们将创建基本的博客模型、视图、模板和URL以显示博客帖子。我们将学习如何利用对象关系映射器(ORM)构建QuerySet,并配置Django管理网站。
第2章将讨论如何向博客添加分页机制,以及如何实现基于类的Django视图。同时,我们还将学习如何利用Django发送电子邮件,以及处理表单和模型表单。除此之外,我们还将实现博客帖子的评论系统。
第3章将考查如何集成第三方应用程序。本章将创建一个标签系统,并学习如何构建复杂的QuerySet以推荐类似的帖子。另外,我们还将学习如何创建自定义模板标签和过滤器。不仅如此,本章还将考查如何使用网站地图框架创建帖子的RSS订阅。最后,我们将通过PostgreSQL的全文本搜索功能构建一个搜索引擎。
第4章将阐述如何构建一个社交网站,我们将学习如何使用Django身份验证框架,并通过自定义概要模型扩展用户模型。此外,本章还将介绍如何使用消息框架,并构建一个自定义身份验证后端。
第5章将介绍使用基于Python Social Auth的OAuth 2与Google、Facebook和Twitter实现社交身份验证。这里,我们将学习如何使用Django Extensions并通过HTTPS运行开发服务器,进而自定义社交身份验证管线,以自动化用户信息的创建。
第6章将讨论如何将社交应用程序转换为图像收藏网站。其间,我们将定义模型的多对多关系,并创建一个与项目集成的JavaScript书签小工具。此外,本章还将展示如何生成图像缩略图。同时,我们还将学习如何利用JavaScript和Django实现匿名HTTP请求和无限滚动分页机制。
第7章将考查如何构建一个关注系统。通过创建一个用户活动流应用程序,我们将完成图像收藏网站。另外,我们还将讨论如何创建模型间的通用关系,并优化QuerySet。我们将处理信号并实现反规范化。我们将采用Django Debug Toolbar获取相应的调试信息。最后,我们还将把Redis集成至项目中,并对图像视图进行计数,并利用Redis创建图像查看排名。
第8章将探讨如何创建一个在线商店。其中,我们将构建商品目录模型,并通过Django会话创建一个商品购物车。随后,我们将为商品购物车构建一个上下文预处理器,并学习如何管理顾客订单。此外,我们将学习如何利用Celery和RabbitMQ发送异步通知。最后,我们还将学习如何通过Flower监测Celery。
第9章将解释如何将一个支付网关与在线商店进行集成。在应用程序中,我们将集成Stripe Checkout并接收异步支付通知。除此之外,我们还将在管理网站中实现自定义视图,并定制管理网站以将订单导出为CSV文件。最后,我们还将学习如何动态生成PDF发票。
第10章将考查如何创建优惠券系统,并对购物车中的商品进行打折。相应地,我们将更新Stripe Checkout集成,以实现优惠券打折功能,并将优惠券应用于订单上。其间我们将使用Redis存储经常一起购买的商品,并使用这些信息构建一个商品推荐引擎。
第11章将展示如何向项目中添加国际化功能。并学习如何生成、管理翻译文件,同时翻译Python代码中的字符串和Django模板。这里,我们将采用Rosetta来管理翻译并实现每种语言的URL。另外,我们还将学习如何通过django-parler来翻译模型字段,以及如何使用基于ORM的翻译功能。最后,我们将利用django-localflavor创建一个本地化的表单字段。
第12章将创建一个在线学习平台,以进一步丰富项目的特性,并创建内容管理系统的初始模型。此处,我们将采用模型继承机制来创建多态内容的数据模型,同时还将学习如何通过构建一个字段来排序对象,进而创建自定义模型字段。最后,本章将实现CMS的身份验证视图。
第13章将讨论如何通过基于类的视图和混入来创建一个CMS。其中,我们将使用Django分组和授权系统来限制对视图的访问并实现表单集,以编辑课程内容。另外,我们还将创建一种下拉功能,以利用JavaScript和Django重新排序课程模块及其内容。
第14章将介绍如何实现课程目录的公共视图。其间,我们将创建一个学生注册系统,并管理学生的课程注册。我们还将创建一个功能以渲染课程模块的不同类型的内容。除此之外,我们还将学习如何利用Django缓存框架来缓存内容,以及配置项目的Memcached和Redis缓存后端。最后,我们将学习如何利用管理网站来监测Redis。
第15章考查如何利用Django REST框架构建项目的RESTful API。在本章中,我们将学习创建模型的序列化器和自定义API视图。接下来,我们将处理API身份验证并实现API视图的授权。另外,我们还将学习如何构建API视图集合和路由器。最后,本章将讨论如何利用Requests库自定义API。
第16章将阐述如何利用Django Channels来创建学生的实时聊天服务器。这里,我们将实现基于WebSocket的异步通信功能。相应地,我们将创建一个基于Python的WebSocket使用者,并实现基于JavaScript的WebSocket客户端。随后,我们将利用Redis设置一个通道层,并使WebSocket使用者完全异步。
第17章将展示创建多环境设置,以及通过PostgreSQL、Redis、uWSGI、NGINX、 Daphne、Docker Compose设置生产环境。另外,我们还将学习如何通过HTTPS安全地处理项目,并使用Django系统检查框架。最后,本章还将讨论如何构建自定义中间件及自定义管理命令。
背景知识
? 读者应具有Python方面的背景知识。
? 读者应熟悉HTML和JavaScript。
? 建议读者阅读Django官方文档中第1~3部分中的内容,对应网址为https://docs. djangoproject.com/en/4.1/intro/tutorial01/。
下载示例代码文件
本书代码托管于GitHub上,对应网址为https://github.com/PacktPublishing/Django-4- by-example。除此之外,读者还可访问https://github.com/PacktPublishing/,其中包含了其他代码包和视频等丰富的内容。
下载彩色图像
我们提供了本书中彩色的截图/图表的图像,读者可访问https://static.packt-cdn.com/ downloads/9781801813051_ColorImages.pdf进行下载。
本书约定
本书采用了一些文本方面的约定表达方法。
代码块如下所示。
from django.contrib import admin
from .models import Post
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',
]
命令行输入或输出如下所示。
python manage.py runserver
表示警告或重要的注意事项。
表示提示信息或操作技巧。
读者反馈和客户支持
欢迎读者对本书提出建议或意见反馈,对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。
勘误表
尽管我们希望做到尽善尽美,但书中难免有疏漏和不妥之处。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub. com/submit-errata,选取对应书籍,输入并提交相关问题的详细内容。
版权须知
一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现本书任意形式的副本,请告知我们网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件至copyright@packtpub.com。
若读者针对某项技术具有专家级的见解,抑或计划撰写或完善某部著作,则可访问http://authors.packtpub.com。
问题解答
读者对本书有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。