Bottle 对 HTTP 请求的处理

最近玩Bottle这个框架, 分析了一下它的源码, 顺便也理一下它是怎么处理HTTP请求的.

代码结构

我们先分析下bottle.py的代码结构. 这个单文件的框架有2900多行, 大致结构如下(手头的版本是0.10.7):

  1. 0000-0140: 模块载入, 兼容性调整
  2. 0140-0200: 逻辑无关的工具函数和工具类定义
  3. 0200-0240: 异常定义. 需要注意的是, 不需要消息体的HTTP响应, 例如HTTP重定向之类, 在bottle中也被处理成一种异常.
  4. 0240-0520: URL映射相关逻辑, 包括若干个路由异常的定义.
  5. 0520:0860: 主Bottle类的定义.
  6. 0860-1440: 装HTTP请求和响应的类的定义. 微型框架啥都可以省省, 但是这个如果再省, 就不能被称为是框架了.
  7. 1440-1570: 各种插件.
  8. 1570-1800: 各种数据结构.
  9. 1800-2050: 乱七八糟的小函数.
  10. 2050-2280: 框架虽小, 兼容的服务器倒真不少...
  11. 2280-2450: 应用控制, 也挺乱的, 两个用来载入app, 一个起server, 还有一个用来自动重启server(这个都有啊喂, 你真是微型框架咩).
  12. 2450-2830: 模板渲染及处理, 兼容的模板系统也不少.
  13. 2830-EOF : 变量定义及一些实例化, 以及起内置服务器的main函数.

由于有实例化的部分, 我们得先看看这段. 一旦你要从bottle.py中引入一个名字到你自己的模块, 这些代码就得执行一遍. 除了那些对变量的定义外, 这一段做了下面几件事情:

详细阅读:http://blog.xiaket.org/2012/bottle-source-analysis.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。