1、 内 容 简 介 本书是以 Python 为基础进行 Web 应用开发的进阶读物。书中以一个实例项目为主线,使用 Django 2开发框架,在实践中边学边做,理论联系实际。每节都配有思维导图,使读者对项目需求一目了然;每章都有知识点和文档导读,引导读者“知其所以然”。相信认真阅读本书的读者,不仅能够得到“鱼”,更能得到“渔”,从而具备独立开发项目的能力。本书适合已经具有 Python 基础技能、进行 Web 应用开发的读者阅读。如有此意愿,但尚缺乏 Python 基础技能者,推荐阅读跟老齐学 Python:轻松入门。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图
2、书在版编目(CIP)数据 跟老齐学 Python:Django 实战/齐伟编著.2 版.北京:电子工业出版社,2019.1 ISBN 978-7-121-35503-5.跟.齐.软件工具程序设计.TP311.561 中国版本图书馆 CIP 数据核字(2018)第 258023 号 策划编辑:高洪霞 责任编辑:牛 勇 特约编辑:赵树刚 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:7871092 1/16 印张:17.5 字数:448 千字 版 次:2017 年 10 月第 1 版 2019 年 1 月第 2 版 印 次:2019 年 1
3、 月第 1 次印刷 定 价:79.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:(010)51260888-819,。序 按照 Django 的版本发布计划,现在已经是 Django 2 的时代了,所以,本书也要跟进。在本书第 2 版的代码中,使用了 Django 2,源码依然放在:https:/ 2 版相对第 1 版,不仅是 Django 版本的迭代,对部分内容也进行了修改,采用了读者对第 1 版提出的各种意见和建
4、议,在此对众多热心读者表示感谢。Web 开发所需要的技术比较庞杂,那些“从前到后”都能做的开发者被称为“全栈工程师”。但是,如果本书宣称“全栈”,肯定是骗人的请读者注意,凡是宣称“全栈”的书或课程,都要小心。要达到“全栈”的目的,不仅需要读书,更需要项目的积累。为了协助读者了解 Web 开发的各种相关技术,我特意配合本书开发了一个小程序(名为:跟老齐学)。希望能够通过小程序,实现“把书读厚”的目的。至于“读薄”,抑或“放弃”,则应视读者个人的修为而定了。扫描二维码,关注小程序(小程序名称:跟老齐学)。除了小程序之外,QQ 群(新的群号:746028518)依然是读者之间的交流园地;网站()也会
5、一如既往地提供相关阅读资料。非常感谢编辑老师为本书所付出的辛苦工作,以及刘燕清先生在百忙之中帮助我调试代码,在此一并表示感谢!齐 伟 2018 年 7 月 前言 是的,你应该开始阅读本书了。如果读者已经通过跟老齐学 Python:轻松入门这本书完成了 Python 入门,那么接下来就要用 Python 做一些实际项目了,做什么呢?可以做的东西真不少,比如数据统计、爬虫、机器学习、人工智能等,当然还有不可或缺的 Web 开发。本书就是要带领读者:学习 Django(特别声明,本书中的项目选用 Django 2);完成一个项目;边做项目边学知识。因此,本书按照完成一个项目从易到难的顺序,以项目为主
6、线逐渐展开对 Django 的学习。Django 是一种在 Web 开发中应用非常广泛的开发框架,它能够让程序员非常快捷地建设一个网站,并且支持网站开发中各种复杂的业务。如果需要快速建设一个网站,并且希望后期还能通过迭代开发实现网站功能和性能的提升,那么 Django 是一个不错的选择。Django 的官方网站中有不少内容完备的文档,当然,这种完备不是针对初学者而言的。对于初学者来说,也许官方文档太简要了,因此本书的作用就是将初学者领入 Django 开发的大门,并引导读者熟悉使用 Django 官方文档。当读者阅读并练习完本书的项目后,就能够使用官方文档进行开发了,本书的目的也就达到了。本书
7、从始至终贯穿着一个项目实践,将开发实战中常用的 Django 知识串联起来,因此它不像课本那样按部就班地把每个知识点都罗列出来,而是根据项目需要,将技能融汇在实战之中。此外,如果仅从开发实践的角度学习 Django,难免会出现就问题而解决问题的现象,缺少系统和深入的学习。为此,书中的每个小节都配有“知识点”,用以扩展或者系统化有关知识,特别是在“文档导读”中会向读者提供有关网络资料,试图让读者知其然并知其所以然。在项目进行中,读者可能会遇到暂时无法理解的部分,不要纠结于一时之惑,而要跟着项目继续进行下去,或许到后面就能理解前面的内容了“发展是硬道理”。如果正在阅读本书的你是 Web 开发的初学
8、者,此前没有做过任何网站开发,那么笔者特别建议遵循如下学习方法。跟老齐学 Python:Django 实战(第 2 版)VI 严格按照本书要求,将所有代码都认真敲过。不要复制代码(本书提供的源代码,仅仅是一个参考),要自己一个字母一个字母地敲进去。将自己的调试结果与本书所示结果进行对照,看看是否实现了预期的功能。在调试不能通过时,首先要认真检查自己的代码,包括但不限于拼写问题、缩进问题等,若还不能解决,可通过 Google 搜索该异常(错误),请相信,你的错误别人也同样遇到过。本书所支持的网站 和 QQ 群(26913719)也是读者学习的助手。本书提示读者阅读的官方文档,一定要认真阅读。本书
9、实际上是一个 Django 项目,项目中包含了多个应用。如果读者按照本书的要求,第一遍就实现了应用的功能,那只能说明本书描述无误且你的阅读能力尚可,并不代表你已经掌握了什么。只有当你把刚刚调试通过的应用删除,然后完全靠自己的记忆和理解,同样实现了该应用的功能,才能说明你掌握了相关知识技能。再次强调,要理解相关内容,就必须多重复几遍。因为本书是以“项目为主线”的,所以不会面面俱到地将 Django 的所有内容介绍一遍,而是根据项目的功能需要,有选择地使用和介绍有关内容。对于具体功能的实现,书中所给出的代码也非唯一写法,读者可以使用其他更好的方式实现。在实际的 Web 开发项目中,除使用 Djan
10、go 框架外,还会用到 HTML、CSS、JavaScript 等知识,从而做出一个看起来有点设计感的页面。虽然说“人不可貌相”,但使用 Django 做出一个漂亮的前端,还是能够让人感觉很舒服的。因此,书中也涉及一些前端内容,读者在阅读时,如果缺少相关知识,可以实时补充。当然,前端知识并不是学习本书所必备的,因为凭借读者的聪明才智和无所不包的网络,掌握应付本书所需要的前端知识是非常容易的。读者可以在 GitHub 上(https:/ 伟 2018 年 8 月 目录 第 1 章 简单的博客系统.1 1.1 Django 起步.1 1.1.1 Django 简介.1 1.1.2 安装 Djang
11、o.3 1.1.3 创建项目.4 1.1.4 创建应用.6 1.1.5 网站配置.12 1.1.6 知识点.13 1.2 编写博客的数据模型类.13 1.2.1 数据模型类.14 1.2.2 发布博客文章.18 1.2.3 知识点.22 1.3 显示博客信息.24 1.3.1 显示文章标题.25 1.3.2 查看文章内容.30 1.3.3 知识点.33 第 2 章 用户管理.37 2.1 自定义模板和静态文件位置.37 2.1.1 自定义模板位置.38 2.1.2 自定义静态文件位置.38 2.1.3 通用静态文件和基础模板.39 2.1.4 重置管理后台模板.43 2.1.5 知识点.45
12、2.2 用户登录.46 跟老齐学 Python:Django 实战(第 2 版)VIII 2.2.1 创建应用.47 2.2.2 理解表单类.48 2.2.3 登录的视图函数.49 2.2.4 登录的前端界面.52 2.2.5 知识点.56 2.3 用内置方法实现登录和退出.58 2.3.1 内置的登录方法.58 2.3.2 判断用户是否登录.60 2.3.3 内置的退出方法.61 2.3.4 知识点.62 2.4 用户注册.64 2.4.1 简单注册.64 2.4.2 增加注册内容.67 2.4.3 管理新增的注册内容.71 2.4.4 知识点.72 2.5 关于密码的操作.74 2.5.1
13、 修改密码.74 2.5.2 重置密码.79 2.5.3 知识点.85 2.6 维护个人信息.87 2.6.1 个人信息的数据模型类和表单类.87 2.6.2 展示个人信息.88 2.6.3 编辑个人信息.91 2.6.4 上传和裁剪头像图片.95 2.6.5 优化头像上传功能.103 2.6.6 对个人信息进行管理.106 2.6.7 知识点.107 第 3 章 文章管理和展示.109 3.1 管理文章栏目.109 3.1.1 设置栏目.109 3.1.2 编辑栏目.117 3.1.3 删除栏目.119 3.1.4 知识点.121 目录 IX 3.2 发布和显示文章.124 3.2.1 简单
14、的文章发布.125 3.2.2 使用 Markdown.130 3.2.3 文章标题列表.132 3.2.4 知识点.140 3.3 删除和修改文章.141 3.3.1 删除.141 3.3.2 修改.143 3.3.3 设置分页功能.147 3.3.4 知识点.149 3.4 文章展示.151 3.4.1 新写文章标题列表.151 3.4.2 重新编写“查看文章”功能.155 3.4.3 知识点.156 第 4 章 拓展网站功能.158 4.1 梳理已有功能.158 4.1.1 修改导航栏.158 4.1.2 修改登录和注册后的跳转.159 4.1.3 知识点.161 4.2 查看作者全部文
15、章.162 4.2.1 查看某作者的文章列表.162 4.2.2 知识点.166 4.3 为文章点赞.167 4.3.1 修改数据模型类.167 4.3.2 编写视图函数.168 4.3.3 修改模板文件.169 4.3.4 知识点.173 4.4 文章的阅读次数.174 4.4.1 安装 Redis.175 4.4.2 在 Python 中使用 Redis.176 4.4.3 记录阅读次数.177 4.4.4 显示最“热”文章.178 4.4.5 知识点.180 跟老齐学 Python:Django 实战(第 2 版)X 4.5 文章的评论功能.181 4.5.1 数据模型类和表单类.181
16、 4.5.2 实现评论功能.183 4.5.3 知识点.185 4.6 多样化显示.186 4.6.1 统计文章总数.187 4.6.2 最新发布的文章.190 4.6.3 评论最多的文章.191 4.6.4 自定义模板选择器.194 4.6.5 知识点.195 4.7 管理和应用文章标签.196 4.7.1 管理文章标签.197 4.7.2 发布文章时选择标签.202 4.7.3 在文章中显示文章标签.204 4.7.4 推荐相似文章.205 4.7.5 知识点.207 第 5 章 收集和展示图片.208 5.1 收集网络图片.208 5.1.1 创建图片相关类.209 5.1.2 收集和管理图片.212 5.1.3 完善图片管理功能.217 5.1.4 知识点.220 5.2 展示图片.221 5.2.1 瀑布流方式展示图片.222 5.2.2 查看图片的详细信息.225 5.2.3 知识点.226 第 6 章 中场休整.228 第 7 章 创建在线学习应用.229 7.1 基于类的视图.229 7.1.1 最简类视图.230 7.1.2 读取数据.232 7.1.3 初步了解 M