Skip to content

1. 前言

本文档的 PDF 版本可在此处获取 |HERE|。

本文档的示例可通过 |HERE| 获取。

本文提供了一份涵盖不同领域的 Python 脚本列表:

  • 语言基础;
  • 数据库管理 MySQL 和 PostgreSQL;
  • 网络编程 TCP/ IP(协议 HTTP、POP3、IMAP、SMTP);
  • 基于 FLASK 框架的 MVC 网页编程;
  • 三层架构与接口编程;

这不是一门全面的 Python 课程,而是一本面向已使用过 Perl、PHP 等脚本语言的开发者的示例集, VBScript,或习惯于Java、C#等强类型语言,并希望探索面向对象脚本语言的开发者。对于从未或很少接触编程的读者,本文档并不适用。

本文档亦非“最佳实践”汇编。经验丰富的开发者可能会发现某些代码尚有优化空间。本文档的唯一目的是为希望入门 Python 3 语言和 Flask 框架的读者提供示例。读者随后可通过其他文档进一步深化学习。

脚本均附有注释,并附有执行结果。有时还会提供额外的说明。阅读本文需主动思考:要理解一个脚本,必须同时阅读其代码、注释和执行结果。

本文档中的示例可通过以下链接访问|HERE|

Image

该文档是对 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 [Introduction au langage PHP7 par l’exemple] 课程进行了移植。因此,我并未遵循传统的 Python 或 Flask 课程结构。 我首要的目标是探索如何利用 Python 3 实现我在 PHP 7 中完成的功能。最终,我成功地使用 Python 3 / Flask 重现了 PHP 7 课程中的所有示例。

本文档可能存在错误或疏漏。读者可通过讨论区 |forum| 进行反馈。

文档内容如下:

章节
代码文件夹
内容
   
 
课程介绍
 
工作环境的搭建
[bases]
Python语言基础——语言结构——数据类型——函数——控制台输出——格式化字符串——类型转换——列表——字典——正则表达式
[strings]
字符串的表示法 – <str>类的方法 – 字符串的编码/解码在 UTF-8
[exceptions]
异常处理
[fonctions]
变量的作用域 – 参数传递方式 – 使用模块 – Python 路径 – 命名参数 – 递归函数
[fichiers]
读写文本文件 – 处理 UTF-8 编码的文件 – 处理 jSON 文件
[impots/v01]
应用练习第1版:所得税计算。该应用共有18个版本——第1版实现了基于流程的解决方案
[imports]
通过导入模块管理应用程序的依赖关系——介绍了一种依赖管理方法——该方法贯穿整篇文档——Python路径管理
[impots/v02]
应用程序的第 2 版延续了第 1 版的设计,将所有配置常量汇总到一个配置文件中,该文件同时管理 Python 路径
[impots/v03]
应用程序的第3版延续了第2版的设计,将函数封装在模块中——依赖管理通过配置实现——引入jSON文件,用于读取计算税款所需的数据并写入计算结果
[classes/01]
类——继承——方法与属性——getter/setter——构造函数——属性 [__dict__]
[classes/02]
本文后续部分使用的 [BaseEntity] [MyException] 类简介 – [BaseEntity] 简化了对象与字典之间的转换
[troiscouches]
分层架构与接口编程。本章介绍了本文档其余部分中使用的编程方法
[impots/v04]
应用程序第 4 版——此版本实现了一个采用分层架构、接口编程以及使用 [BaseEntity] [MyException] 派生类的解决方案
[databases/mysql]
SGBD 的安装 MySQL – 连接数据库 – 创建表 – 执行命令 SQL SELECT, UPDATE、DELETE、INSERT – 事务 – 参数化查询 SQL
[databases/postgresql]
安装 SGBD PostgreSQL – 连接数据库 – 创建表 – 执行命令 SQL SELECT, UPDATE、DELETE、INSERT – 事务 – 参数化查询 SQL
[databases/anysgbd]
编写与 SGBD 无关的代码
[databases/sqlalchemy]
ORM(对象关系映射器)SqlAlchemy——ORM 允许以统一的方式处理不同的 SGBD - 映射类/表 SQL – 对表的图像类进行操作 SQL
[impots/v05]
税款计算应用程序第 5 版 – 采用第 04 版的分层架构以及ORM SqlAlchemy 处理 SGBD MySQL 和 PostgreSQL
[inet]
互联网编程——TCP / IP 协议(传输控制协议 / 互联网协议)——HTTP (HyperText 传输协议)—— SMTP(简单邮件传输协议)—— POP(邮局协议)—— IMAP(互联网消息访问协议)
[flask]
使用 Flask Web 框架的 Web 服务 – 页面显示 HTML – Web 服务 jSON – 请求 GET 和 POST – Web 会话管理
[impots/http-servers/01]
[impots/http-clients/01]
应用练习第 6 版——创建一个采用多层架构的税额计算 Web 服务 jSON——为该服务器编写一个采用多层架构的 Web 客户端——客户端/服务器编程——使用模块 [requests]
[impots/http-servers/02]
[impots/http-clients/02]
应用程序练习第 7 版——第 6 版已改进:客户端和服务器均采用多线程——[Logger] 实用程序用于记录客户端/服务器通信——[SendMail] 用于向应用程序管理员发送电子邮件
[impots/http-servers/03]
[impots/http-clients/03]
应用练习第 8 版——第 7 版通过使用 Web 会话进行了改进
[xml]
使用模块 [xmltodict] 管理 XML(eXtended 标记语言)
[impots/http-servers/04]
[impots/http-clients/04]
应用练习第 9 版——第 8 版已修改,以支持 XML 格式的客户端/服务器通信;
[impots/http-servers/05]
[impots/http-clients/05]
应用练习第10版——不再通过N个请求处理N名纳税人(GET),而是使用单个请求(POST),并将N名纳税人包含在请求主体中(POST)
[impots/http-servers/06]
[impots/http-clients/06]
应用练习第11版——应用程序的客户端/服务器架构已更改:[métier]层从服务器转移至客户端
[impots/http-servers/07]
应用练习第 12 版——此版本实现了一个 MVC 服务器(Model – View – 控制器)架构,该服务器可根据客户端请求,无差别地返回 jSON、XML 和 HTML。 本章实现了服务器版本 jSON 和 XML
[impots/http-clients/07]
第 12 版 MVC 服务器的 jSON 和 XML 客户端的实现
[impots/http-servers/07]
第 12 版 HTML 服务器的实现——使用 CSS Bootstrap 框架——
[impots/http-servers/08]
第13版应用练习——重构第12版代码——使用[flask_session]模块和Redis服务器进行会话管理——使用加密密码
[impots/http-servers/09]
[impots/http-clients/09]
应用练习第 14 版——使用 CSRF 令牌实现 URL(跨站请求伪造)
[impots/http-servers/10]
应用练习第 15 版——重构第 14 版的代码以处理两种类型的操作:ASV(显示视图操作),仅用于显示视图而不改变服务器状态; ADS(执行操作)——执行会改变服务器状态的操作,这些操作均以重定向至 ASV 操作结束,从而能够正确处理客户端浏览器的页面刷新
[impots/http-servers/11]
应用程序第 16 版——管理带前缀的 URL
[impots/http-servers/12]
应用程序第 17 版——将第 16 版移植到 Apache / Windows 服务器
[impots/http-servers/13]
应用程序第18版——修复了第17版中的一个异常

本应用练习的最终版本是一个用于计算税款的客户端/服务器应用程序,其架构如下:

Image

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

Image

本文内容信息量较大。坚持读完全文的读者将对基于 Python / Flask 的 MVC 网络编程有深入了解,进而也能对其他语言的 MVC 网络编程有全面认识。

若读者更倾向于直接查看代码、测试并修改代码,而非阅读课程内容,可按以下步骤操作:

Image

文件 [README.md] 内容如下:

Image

读者不太可能通读整门课程:

  • 初学者可能会阅读第1至15章,然后就此打住。随后,他们可以花时间编写自己的Python脚本,之后再回到本课程;
  • 具备 Python 基础且希望学习数据库和 ORM(对象关系映射器)读者,可能只需阅读第 16 至 20 章;
  • 希望入门网络编程(HTTP、SMTP、POP3、IMAP)的读者可阅读第21章。 本章内容较为复杂,涉及高级脚本。读者可从两个层面进行阅读:
    • 了解互联网协议;
    • 获取利用这些协议的脚本;
  • 具备 Python 基础且希望使用 Flask 框架入门 Web 编程的读者,请阅读第 22 章;
  • 希望深入学习基于Flask框架的Web编程的读者,可研读第23至38章。其中将构建日益复杂的客户端/服务器应用程序,并根据MVC(模型-视图-控制器)开发模式,构建一个HTML/Python应用程序。 – 控制器) 开发模式构建了越来越复杂的客户端/服务器应用程序,以及一个 HTML / Python 应用程序。该应用程序在第 32 章中进行开发。读者可在此处停止阅读。后续章节涉及的修改并非根本性内容;

Serge Tahé,2020年9月