.. include:: ../LINKS.rst 本章导读 =============== - 提纲携领式的对 `WEB2PY`_ 这一应用开发框架进行了整体介绍,涉及: - 设计思想 - 组件关系 - 安全设计 - 许可协议 - 应用结构 - 等等核心知识 - 是引导新人快速理解 `WEB2PY`_ 的重要章节! web2py概述 =============== WEB2PY是一款免费、开源的Web开发框架,特别适合开发敏捷、安全、数据库驱动的Web应用。WEB2PY采用Python语言编写,并且在框架中可以使用Python编程。WEB2PY是一个全功能栈的框架,也就是说它集成了所有Web开发所须得组件。 WEB2PY被设计成引导开发者遵循良好的软件开发实践,例如:模型、视图、控制器(Model View Controller)模式。WEB2PY将数据层(Model)、表示层(View)、逻辑层、以及工作流(Controller)分开。WEB2PY所提供的库,能够帮助开发者分别设计、开发以及测试每一层,最后让各层在一起配合工作。 安全性是WEB2PY设计的一大目标。框架会遵循成熟实践方式,自动处理很多安全相关的问题。例如:框架会验证所有输入(防止注入攻击),转意替换所有输出(防止跨站点脚本攻击),重命名所有上传文件(防止目录遍历攻击),并且所有session信息都存储在服务器端。用户采用WEB2PY框架,在安全方面万无一失。 WEB2PY中包含了数据库抽象层(Database Abstratction Layer),能够动态生成SQL语句,而不需要开发者自己写。该层生成的SQL语句能够支持SQLite,MySQL,PostgreSQL,MSSQL,FireBird,Oracle,IBM DB2,以及Informix。数据库抽象层在谷歌软件引擎(Google App Engine)上运行时,还能通过函数调用支持谷歌BigTable。当用户定义了一个或多个表时,WEB2PY能够自动生成基于Web的全功能数据库管理界面,从而使数据库以及表的访问变得非常容易。 WEB2PY区别于其他框架的另一个显著特点,就是对于Web2.0的全面支持。实际上,WEB2PY不如要任何的安装和配置,并且能够在支持Python的任何架构电脑上运行(支持Windows、Windows CE、Mac OS X、iPhone、Unix、Linux),并且应用的开发、部署和维护能够在本地或远程通过Web界面完成。WEB2PY还可以配合CPyhon(基于C语言实现),以及Jython(基于JAVA语言的实现),支持2.4,2.5,2.6版本,官方支持2.5版本,我们不能保证对于更早版本的兼容性。 WEB2PY提供了一套错误票据系统。当错误发生时,系统会发出一个票据给用户,而错误信息则被系统记录只有管理员才能查看。 WEB2PY是一个开源软件,遵守GPL2.0协议,不过在WEB2PY下开发的应用则不受任何协议限制。只要软件不是明显包含WEB2PY源代码,就不会被认为是“衍生作品”。WEB2PY还允许开发者把开发应用的源代码进行二进制编译,并以封闭源代码方式发布,尽管该应用还需要WEB2PY框架才能运行。WEB2PY授权中还包含特例,允许开发者发布软件的时候,把WEB2PY编译过的二进制代码一同发布,从而不分发任何源代码。 WEB2PY的另一个特性就是,我们,框架的开发者保证未来产品的向后兼容性。实际上我们从2007年10月,WEB2PY第一版开始到今天都做到了。尽管新的功能一直在加入,问题也一直被修正,如果你的程序在WEB2PY 1.0中能运行,那么它今天还能运行。 下面就是一些WEB2PY代码的例子,展示了WEB2PY的能力和简洁。 代码: :: db.define_table('person', Field('name', 'string'), Field('image', 'upload')) 以上代码创建了一个名为“person”的表,该表有两个字段:“name”,字符串类型;以及“image”,图片上传类型(用来保存实际图片)。如果该表已经存在,但是表结构不同,该表将会被自动更改。 假设上述表已经存在。 代码: :: form = SQLFORM(db.person) 上述代码创建了一个表单用来向表格中添加数据,允许用户上传图片。 代码: :: if form.accepts(request.vars, session): pass 验证提交的表单,重命名上传图片以保证安全性,图片被存储到文件中,插入相应的记录到数据库中,防止重复提交,并且如果用户提交的数据没有通过验证,在表单里追加出错信息提示。