1. 前言
本文件的PDF版本可在此处获取 |HERE|。
本文中列举的示例可点击<此处>查看。
本文档提供了一份涵盖多个领域的 Python 脚本列表:
- 语言基础;
- MySQL 和 PostgreSQL 数据库管理;
- TCP/IP 网络编程(HTTP、POP3、IMAP、SMTP 协议);
- 基于 FLASK 框架的 MVC Web 编程;
- 三层架构与面向接口的编程;
本课程并非全面的 Python 教程,而是一系列示例的集合,主要面向已使用过 Perl、PHP 或 VBScript 等脚本语言的开发者,或习惯于 Java 或 C# 等强类型语言、并希望探索面向对象脚本语言的开发者。对于编程经验较少或毫无编程经验的读者,本文档并不适合。
本文档也不是“最佳实践”的汇编。经验丰富的开发者可能会发现,其中部分代码可以写得更优雅。本文档的唯一目的是为希望学习 Python 3 和 Flask 框架的人提供示例。之后,他们可以借助其他资源加深理解。
脚本均附有注释,并展示了执行结果。有时还会提供补充说明。阅读本文需主动思考:要理解一个脚本,必须通读其代码、注释及执行结果。
本文档中的示例可在此处查看:

本文档是对 2011 年 6 月发布的旧版文档 |https://tahe.developpez.com/tutoriels-cours/python/| 的更新。2011 年的文档是使用 Python 2.7 解释器构建的。此后,Python 3.x 版本已陆续发布。 截至 2020 年 2 月,当前版本为 3.8。3.x 版本引入了跨版本兼容性的断层:在 Python 2.7 下运行的代码可能无法在 Python 3.x 下运行。这一点在控制台输出方面尤为明显。 在 2.7 版本中,您可以编写 [print "toto"],而在 3.x 版本中则必须编写 [print("toto")]:必须使用圆括号。这一简单的变化意味着 2011 年文档中提供的绝大多数代码无法直接在 Python 3.x 中使用,必须进行修改。
这份新文档不仅将 2011 年的代码更新为可在 Python 3.8 上运行:
- 关于 TCP/IP 编程和数据库使用的章节已发生重大变更;
- 关于 Web 编程的部分,此前仅为入门介绍,现已发展为使用 Flask 框架的完整课程;
在制作这门课程时,我采取了一种非传统的做法:我移植了PHP课程《通过实例学习PHP7入门》。因此,我并没有遵循Python或Flask课程的传统结构。最重要的是,我想知道如何用Python 3实现我在PHP 7中做过的事情。最终,我成功地在Python 3/Flask中重现了PHP 7课程中的所有示例。
本文档可能存在错误或遗漏。读者可通过讨论帖 |论坛| 进行反馈。
文档内容如下:
章节 | 代码仓库 | 目录 |
课程概述 | ||
设置工作环境 | ||
[基础] | Python 语言的基础 – 语言结构 – 数据类型 – 函数 – 控制台输出 – 格式字符串 – 类型转换 – 列表 – 字典 – 正则 表达式 | |
[字符串] | 字符串表示法 – <str> 类的方法 – 字符串的编码/解码 UTF-8 字符串 | |
[异常] | 异常处理 | |
[函数] | 变量作用域 – 参数 传递 – 使用模块 – Python Python 路径 – 命名 参数 – 递归 函数 | |
[files] | 读写文本文件 – 处理 UTF-8 编码文件 – 处理 JSON 文件 | |
[taxes/v01] | 应用程序的第 1 版 练习:计算所得税 。该应用程序共有18个 个版本——第1版实现了 一种过程化解法 | |
[导入] | 管理应用程序 通过导入 模块——本文介绍了 管理方法 ——该方法贯穿 文档中——管理 Python 路径 | |
[imports/v02] | 应用程序的第 2 版 在第 1 版的基础上,将 所有配置常量整合到一个 配置文件中,该文件还 管理 Python 路径 | |
[impots/v03] | 该应用程序的第 3 版 在第 2 版的基础上,通过使用 封装在 模块中封装的函数—— 管理通过 配置文件——引入了一个 JSON文件来读取 用于税费计算,并写入 计算结果 | |
[classes/01] | 类 – 继承 – 方法 和属性 – 获取器/设置器 – 构造函数 – [__dict__] 属性 | |
[classes/02] | [BaseEntity] 以及在 —— ——[BaseEntity] 有助于实现对象/字典 转换 | |
[三层] | 分层架构与 基于接口的编程。 本章介绍了 在 在 文档 | |
[taxes/v04] | 应用程序的第4版——此 版本实现了一个 ,采用分层架构, 基于接口的编程,以及 并使用从 [BaseEntity] 以及 [MyException] | |
[databases/mysql] | 安装 MySQL 数据库管理系统 – 连接数据库 – 创建表 – 执行 SELECT、UPDATE、DELETE 和 INSERT SQL 语句 – 事务 – 参数化 SQL查询 | |
[数据库/PostgreSQL] | 安装 PostgreSQL 数据库管理系统 – 连接数据库 – 创建表 – 执行 SELECT、UPDATE、DELETE 和 INSERT SQL 语句 – 事务 – 参数化 SQL查询 | |
[数据库/任意DBMS] | 编写与数据库管理系统无关的代码 | |
[数据库/SQLAlchemy] | SqlAlchemy ORM(对象- 关系映射器)——一种 ORM 提供了一种统一的方法 处理不同的数据库管理系统(DBMS)—— 将类映射到 SQL 表—— 对类进行操作 即代表 SQL 表的类 | |
[taxes/v05] | 税费计算应用程序的第5版 ——采用分层 架构以及 SqlAlchemy ORM 配合 支持MySQL和PostgreSQL 数据库管理系统 | |
[inet] | Web 编程 – TCP/IP 协议(传输控制 协议 / 互联网协议) – HTTP 协议(超文本 传输协议) – SMTP (简单邮件传输协议) – POP(邮局协议)– IMAP(互联网邮件访问 协议) | |
[flask] | 使用 Flask Web 框架——显示一个 HTML 页面 – JSON Web 服务 – GET 和 POST 请求 – 管理 Web 会话 | |
[impots/http-servers/01] [taxes/http-clients/01] | 应用程序第 6 版 练习——创建一个用于税费计算的 JSON Web 服务,采用 多层架构——编写 为该服务器编写一个Web客户端,采用 多层架构 – 客户端/服务器编程 – 使用 [requests] 模块 | |
[taxes/http-servers/02] [taxes/http-clients/02] | 应用程序的第7版 练习——第6版已改进: 客户端和服务器均 支持多线程——[Logger] 用于记录客户端/服务器 通信记录的实用工具 – [SendMail] 用于向 向应用程序 管理员 | |
[taxes/http-servers/03] [taxes/http-clients/03] | 应用程序第8版 练习——第7版已通过 通过使用Web会话 | |
[xml] | XML(扩展标记 语言) 管理与 [xmltodict] 模块 | |
[taxes/http-servers/04] [impots/http-clients/04] | 应用程序第 9 版 练习——修改第8版 以支持客户端/服务器 ; | |
[taxes/http-servers/05] [taxes/http-clients/05] | 应用程序第 10 版 练习——通过 N 次 GET 请求 纳税人, 使用单个 POST 请求 将这 N 位纳税人包含在 POST 正文中 | |
[taxes/http-servers/06] [taxes/http-clients/06] | 应用程序的第11版 练习——应用程序的 客户端/服务器架构 进行了修改:[业务]层 从服务器移至 客户端 | |
[taxes/http-servers/07] | 应用程序的第12版 练习——此版本实现了 一个 MVC(模型–视图– 控制器)服务器,用于提供 JSON、XML 和 HTML 格式,具体取决于 客户端的请求。本章 实现了该服务器的 JSON 和 XML 版本 | |
[impots/http-clients/07] | JSON 和 XML客户端的实现 (第12版) | |
[impots/http-servers/07] | HTML 服务器——使用 Bootstrap CSS 框架—— | |
[impots/http-servers/08] | 应用程序的第13版 练习——重构代码 (基于第12版)——会话 管理 [flask_session] 模块和 Redis 服务器——使用加密 密码 | |
[impots/http-servers/09] [impots/http-clients/09] | 应用程序第 14 版 练习——实现 URL 使用 CSRF(跨站请求 )令牌 | |
[impots/http-servers/10] | 应用程序第15版 练习——重构代码 从第14版开始,以处理两种 操作类型:ASV(操作 显示视图),仅用于 用于显示视图, ,以及 ADS(Action Do Something), 则执行会 ——这些 操作最终都会重定向到 ASV 操作——这使得 正确处理页面刷新 | |
[impots/http-servers/11] | 应用程序第 16 版—— 带前缀的URL管理 | |
[impots/http-servers/12] | 应用程序第 17 版 – 将第 16 版移植到 Apache/Windows 服务器 | |
[impots/http-servers/13] | 应用程序的第 18 版 – 修复了第 17 版中的一个错误 |
该应用程序练习的最终版本是一个客户端/服务器税务计算应用程序,其架构如下:

上层的 [web] 层采用 MVC 架构实现:

本文内容较为密集。读者若能通读至最后,将对 Python/Flask 中的 MVC Web 编程有扎实的理解,进而也能深入掌握其他语言中的 MVC Web 编程。
若您更倾向于直接查看代码、进行测试和修改,而非阅读理论讲解,请按以下步骤操作:
- 搭建开发环境:
- 一个 Python 解释器;
- PyCharm Community 集成开发环境;
- Laragon(Apache 服务器、MySQL 数据库管理系统、Redis 服务器);
- PostgreSQL 数据库;
- Postman HTTP 客户端;
- hMailServer 邮件服务器;
- |点击此处|查看示例代码:

- 每个文件夹中都包含一个 [README.md] 文件,该文件将文件夹与课程的某个章节关联起来,并总结了其内容:
[README.md] 文件如下所示:

读者不太可能通读整门课程:
- 初学者可能会阅读第 1 章到第 15 章,然后停下来。他们可以先花时间编写自己的 Python 脚本,之后再回到本课程;
- 对 Python 有基础了解且希望学习数据库和 ORM(对象关系映射器)[SQLAlchemy] 的读者,阅读第 16 至 20 章可能就足够了;
- 想要学习 Web 编程(HTTP、SMTP、POP3、IMAP)的读者可以阅读第 21 章。本章内容相当复杂,涵盖了高级脚本。该章可从两个层面进行阅读:
- 学习互联网协议;
- 获取利用这些协议的脚本;
- 对 Python 有基础了解且希望使用 Flask 框架学习 Web 编程的读者,应阅读第 22 章;
- 希望深入钻研基于Flask框架的Web编程的读者,可研读第23至38章。这些章节涵盖了日益复杂的客户端/服务器应用程序的开发,以及遵循MVC(模型-视图-控制器)开发模式的HTML/Python应用程序。该应用程序在第32章中进行开发。您可在此处停止阅读。后续章节介绍的仅是次要的变更;
Serge Tahé,2020年9月