13. 练习 [税费计算] 与 Web 服务
我们回到第 4.2、4.3、8 和 10 节中已经讲过的 [TAXES] 练习。
![]() |
13.1. 服务器
我们采用以下客户端-服务器架构:
![]() |
在服务器端,我们将再次采用三层架构。[DAO]层将由第10节中使用MySQL数据库管理系统(DBMS)的版本中所用的ImpotsMySQL类实现。[业务]层将由已学习的[ImpotsMetier]类实现。 剩下的就是编写 Web 服务了。该服务从客户端接收一个 params 参数,格式为 params= yes,2,200000,其中第一个元素表示纳税人是否已婚,第二个表示子女数量,第三个表示年薪。
Web 服务代码如下(impots_web_01):
注:
- 第 5 行:从 impots.py 文件导入对象;
- 第 9 行:调试 CGI 脚本可能比较棘手。cgitb 模块会在发生错误时发送崩溃原因。为此,必须将标准错误输出(sys.stderr)重定向到标准输出(sys.stdout)(第 10 行);
- 第 26 行:指定所发送文档性质的 HTTP 头,本例中为未格式化的文本。Web 服务将响应以单行文本形式返回:
- <error>message</error>(若发生错误);
- <tax>value</tax>,其中 value 表示税额。
- 第 43 行:实例化 [dao] 和 [business] 层;
- 第 44–46 行:若发生实例化错误,脚本将发送响应并终止;
- 第 49–53 行:检索 'params' 参数。若该参数缺失,脚本将发送响应并终止;
- 第 56 行:将参数 'yes,2,200000' 拆分为 items 数组中的 3 个字段;
- 第58–77行:检查这3个字段的有效性。若存在错误,脚本发送响应并终止;
- 第 79 行:计算税额;
- 第 81 行:并将结果发送给客户端。
在网页浏览器中,将得到以下结果:
![]() | ![]() |
13.2. 一个编程客户端
该程序(client_impots_web_01)



