Webpy源码分析--总览 webpy 源码

Webpy源码分析--总览 webpy 源码

踩在巨人的肩膀上。

weizetao @ 2012-01-05

最近工作不忙,一直做后台的开发,但对前端技术也很有兴趣,正好朋友让我帮他搞一个小网站,遂开始了我的web开发之旅。我工作中基本都是linux下的C/C++,但我非常热衷于Python,喜欢Python的Simple is power!再对Python下几个web开发框架做了些了解,我相中了web.py这个轻量级的开发框架,它的自由、简单足以吸引任一个程序员。经过两周松松散散的时间,网站做的差不多了,在此还要非常感谢豆瓣上@davidx,因为学习他的开源blog程序让我进步迅速。

因为web.py还不算一个流行的框架,资料也仅限于官网的cookbook,开发和部署的时候经常遇到一些问题或是特殊业务,这时就能展示web.py的优点了所在了,因为轻量级,所以我们可以自己对源码做些修改来适应我们的需求。呵呵,下面是我对webpy的理解与认识,本文主要是研究webpy的程序架构及数据流走向,因为了解了这些,就可以对自己的需求进行有的放矢,整理如下:

一、源代码目录

application.py

应用层,web程序的启动入口,对urls映射与环境变量做初始化,添加请求预处理函数add_processer,这里实现了http请求处理的主回调函数wsgifunc(),分析url映射到对应的处理类并返回应答。

template.py

应用层,webpy中的模板功能。

from.py

应用层,webpy实现的表单功能。

session.py

应用层,实现session的管理,session是由cookies机制实现的,这里当然也不例外,具体的实现有机会再去研究。。。但在这里可以看到可供配置的session选项:

db.py

应用层,提供访问数据库的操作,其实它就是对mysqldb进行的封装。我的程序中没有用到它,而是用的是sqlalchemy,操作起来更方便。

webapi.py

应用层,实现了操作config,header,input,cookies,HTTPERROR,Redirect的接口,还有服务器生成特定应答的接口,比如生成NOT found,404等错误的应答报文。

wsgi.py

中间层,应用层调用apprun的时候会进入到这里,说它是中间层,因为运行模式的选择就在这里,它与上面的应用层和下面的网络层起到中间的纽带关系。运行模式就是runfcgi,runscgi,runsimple等,不同的方式,对应着不同的网络层实现。

httpserver.py

网络层,运行方式为cgi形式的网络层实现,它是基于Python已有的SimpleHTTPServer和BaseHTTPServer实现的。当请求/static/时直接返回文件内容,其它请求则调用指向application中wsgifunc()的handler。

wsgiserver/目录下

网络层,运行方式为独立程序时的网络层实现,wsgiserver.CherryPyWSGIServer是进入到这里的入口,CherryPyWSGIServer包括线程池的初始化,工作线程初始化socket并开始监听等操作。

wserver = wsgiserver.CherryPyWSGIServer(server_address,wsgi_app, server_name="localhost")

sgi_app即时指向应用层的handler,用于处理接收到的请求。

其它

utils.py

这个文件里实现了很多强大的功能,比如提供一些特殊数据结构,对字符串进行特殊操作等,暂且就叫它“基础元”吧。

net.py

提供测试ip,port是否可用,解决html/url等引用及安全编码问题。

http.py

提供判断网页过期、是否存在更新,对网页url前缀、query的一些操作。。。

二、程序结构与数据流程

1.webpy程序结构

webpy程序结构我分为了四个大部分:

开发者:开发者站在所有层的最上面,调用webpy提供的一些功能接口,实现自己的web站点。

应用层:对基于http协议的request进行解析,并实现了一些基本警告、error的应答格式,比如NOTFOUND,500应答报文,提供了session,form,template,db等http服务器基本功能的接口等。

中间层:这里负责运行模式的选择,也就是根据WSGI公共接口选择不同的底层实现,只在启动服务的时候用到。

网络层:接收发送数据,将数据送给应用层处理,再将应答发送给请求者。

如下是我对webpy程序理解的框图:



2.webpy数据流程

参见上图可以很清晰的看书webpy的数据流走向,当程序启动完毕,有新的request请求到来,首先接收网络socket数据,对request进行初步分析,调用wsgi_app指向的func,就是application中的wsgigunc()进行主要的业务处理,给出result后,再从上到下将data顺序返回,最后通过socket发送出去。

其中有很多细节处理,我也没有仔细看,特别是网络层的代码,应用层中比较特殊的比如request的是/static/…路径下,则直接去读取该路径下的文件并返回,若没有该文件则返回NOTFOUND。

在application的wsgifunc函数中,首先先执行注册在processers列表中的回调函数,然后再根据URL映射关系匹配到对应的类去执行,具体处理类的操作就是开发者自己要干的事了。比如连接db,解析from、利用template、运用session等。

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/351282.html

更多阅读

Webpy源码分析--总览 webpy 源码

踩在巨人的肩膀上。weizetao @ 2012-01-05最近工作不忙,一直做后台的开发,但对前端技术也很有兴趣,正好朋友让我帮他搞一个小网站,遂开始了我的web开发之旅。我工作中基本都是linux下的C/C++,但我非常热衷于Python,

VB屏幕保护程序源码:下雪的桌面

本软件利用屏幕截图方法截取整个屏幕,然后调用系统api将鼠标设为不显示,最后随机生成白色点。1、软件组织结构和UI设计:2、程序源码:(1)Form1的源码:Dim WSnow(1000, 1) As IntegerDim X As Integer

讲些澳门赌场里的东东吧----洗码仔 澳门赌场洗码流程

在澳门做洗码的人大体分以下几种: 一是兼职的,大部分澳门本地人只要有机会就会做,因为他们本身没有什么客源但拥有一些优势,就是跟一些贵宾厅比较熟,可以签到码。他们可以签码给朋友赌或签给自己信得过的外地洗码仔,自己再从中间抽一点好

新宝塔线指标源码 宝塔线指标

新宝塔线指标所谓右侧交易者是指等趋势.图形和价格变动以后才操作的人,右侧交易者从不预测后面会怎么样,只做现在该做的事。不受周边环境的影响,客观理智的跟随走势而行动。新宝塔线的特性就是很适合右侧交易者的工具。对技术指标,大

声明:《Webpy源码分析--总览 webpy 源码》为网友乱了夏天蓝了海分享!如侵犯到您的合法权益请联系我们删除