web2py是一种免费的,开源的web开发框架,用于敏捷地开发安全的,数据库驱动的web应用;web2p采用Python语言编写,而且可使用Python编程。web2py是一个完整的堆栈框架,也就是说她包含了开发完整功能的web应用所需的全部组件。php
web2py被设计来指导web开发人员遵循良好的软件工程实践,如使用模型(Model),视图(View),控制器(Controller)MVC模式。web2py将数据表达(the model)从数据表示(the view)和应用逻辑及工做流(the controller)中分开。web2py提供的库能够帮助开发者分别设计,实施和测试MVC中的每一部分,并能使它们一块儿工做。html
web2py是为了安全而构建的。这意味着遵循成熟的方法,他能自动处理不少可能致使安全漏洞的问题。例如web2py验证全部输入(防止注入攻击),转义全部输出(防止跨站点脚本攻击),重命名上传文件(防止目录遍历攻击)。在与安全有关的方面,web2py没有留给应用程序开发人员选择的余地。mysql
web2py中包含数据库抽象层(DAL),它可以动态写入SQL[sql:w] ,所以开发人员不须要本身写。DAL知道如何透明地生成支持SQLite[sqlite] ,MySQL[mysql] ,PostgreSQL[postgres] ,MSSQL[mssql] ,FireBird[firebird] , Oracle[oracle] ,IBM DB2[db2] ,Informix[informix] 以及Ingres[ingresdb] 的SQL语句。当在谷歌App Engine (GAE)[gae]上运行时,DAL也能生成函数调用Google Datastore。实验时,咱们支持更多的数据库。请查看web2py网站和邮件列表,获取最新的支持。一旦有一个或多个数据库表被定义,web2py也能生成一个全功能的基于web的数据库管理接口来访问数据库和表。web
web2py与其它web框架的不一样之处在于,它是惟一全面支持web2.0范例的框架,在这里web就是计算机。实际上,web2py不须要安装或配置,它能在任何支持Python的体系结构(Windows,,Windows CE,Mac OS X,iOS ,Unix/Linux)上运行,应用程序的开发、部署和维护能够经过本地或远程web接口完成。web2py支持CPython(C语言实现)或Jython(Java语言实现),虽然官方声称仅支持2.5版本,但实际支持的版本包括2.4,2.5,2.6,2.7,这保证了应用程序的后向兼容性。sql
web2py提供了一个票据系统。若是出现错误,系统会发出一个票据给用户,并记录错误信息供管理员查看。数据库
下面给出一些web2py语句的例子来展现它的功能和简洁性。代码以下:编程
db=DAL("mysql://root:Free-Wi11@10.0.20.252:3306/mybatis") db.define_table('users',Field('id'),Field('name'),Field('age'),primarykey=['id'],migrate=False)
Python编程一般遵循如下基本原则:浏览器
在web2py中,经过强制开发者使用可靠成熟的软件工程实践,遏制代码重复,保证彻底遵照前两条原则。web2py能指导开发者完成几乎全部web应用开发中的常见任务(建立和处理表单,管理会话,小甜饼“cookie”,错误等等)。安全
web2py对第3个原则的处理与其它框架有所不一样,有时与前两个原则相冲突。尤为是web2py不会导入用户应用,而是在预约义的状况下执行。这会暴露Python和web2py关键字。服务器
对某些人来讲,这看起来就像魔术,但它不是这样的。简单地说,在实践中有些模块已经自动导入了,而不须要开发者导入。web2py试图避免其它框架下存在的使人讨厌的特征,即开发者须要在每一个模型和控制器的顶部导入相同的模块。
web2py经过导入自有模块节约了时间,避免了错误,这遵循了不重复本身和仅有一种实现方式的精髓。
若是开发者想使用其它Python模块或第三方模块,这些模块必须明确导入,就像开发任何其它Python程序同样。
在其最基本的层面上,web应用包含了一组程序(或者函数),当用户访问相应的URL时,该程序将被执行。同时,程序的输出返回给用户,并呈如今浏览器中。
web框架是为了让开发者更快,更简洁,无差错的开发新应用。它经过提供API和开发工具,以减小代码的编写量。
开发web应用的两个经典方法是:
早期的CGI脚本遵循第一种模型。下列脚本遵循第二种模型,例如PHP[php](代码用PHP编写,相似C语言)、ASP(代码用Visual Basic编写)以及JSP(代码用Java编写)脚本。
这里举一个PHP程序的例子,执行时,从数据库中得到数据,并返回一个显示选中记录的HTML页面。
<html><body><h1>Records</h1><? mysql_connect(localhost,username,password); @mysql_select_db(database) or die( "Unable to select database"); $query="SELECT * FROM contacts"; $result=mysql_query($query); mysql_close(); $i=0; while ($i < mysql_numrows($result)) { $name=mysql_result($result,$i,"name"); $phone=mysql_result($result,$i,"phone"); echo "<b>$name</b><br>Phone:$phone<br /><br /><hr /><br />"; $i++; } ?></body></html>
这种方法的问题在于,程序代码嵌入到HTML中,可是这个程序在生成额外的HTML的同时,还要生成SQL语句查询数据库,应用的不一样层次交织在一块儿,代码变得难以阅读和难以维护。对于Ajax应用程序,状况就更糟了,随着应用页数(文件)的增长,复杂性也增长。
上述例子的功能,在web2py中可用两行Python代码来表达:
def index(): return HTML(BODY(H1('Records'), db().select(db.contacts.ALL)))
在这个简单的例子中,页面结构由HTML,BODY和H1对象程序化表示;经过select语句查询数据库db;最后,全部结果都被序列化成HTML代码。注意db不是关键字,而是一个用户定义的变量。为了不混淆,咱们将始终使用db这一术语来指代数据库链接。
web框架一般分为两种类型:一种是“胶水”框架,经过组合(粘合)几个第三方组件来构造。另外一种是“全功能栈”框架,经过建立特别设计的紧密整合和协做工做的组件来构造。
web2py是一个全堆栈框架。几乎全部组件都是从头构建的,并被设计成协同工做,可是这些组件在web2py框架以外一样能发挥功能。例如,数据库抽象层(DAL)或模板语言都能独立于web2py框架使用,只要将gluon.dal或gluon.template导入你的Python应用便可。gluon是包含系统库的web2py模块的名称。一些web2py库依赖web2py的其它部分,例如,创建和处理来自数据库表格的表单。web2py也可以同第三方Python库配合使用,包括其它模板语言和DAL,但它们之间的结合没有原配组件那么紧密。
web2py鼓励开发人员将数据表达(Model),数据表达(View)和应用工做流(Controller)分离。
web2py中一个请求的典型工做流描述以下:
在图中:
这里给一个最小的,完整的MVC应用,它由3个文件组成:
“db.py”是模型:
db=DAL("mysql://root:Free-Wi11@10.0.20.252:3306/mybatis") db.define_table('users',Field('id'),Field('name'),Field('age'),primarykey=['id'],migrate=False)
它链接数据库(在本例中是指存储在10.0.20.252中的mysql数据库)并定义了一个名为users的表,若是该表不存在,web2py将在后台透明的建立它,并生成适用于特定数据库引擎的sql语句。
当表格被定义并建立好以后,web2py还会生成一个功能完整的基于web的数据库管理界面,该界面称做appadmin,经过它访问数据库和表。
”default.py”是控制器:
def users(): grid=SQLFORM.grid(db.users,user_signature=False) return locals()
在web2py中,URL被映射成Python模块和函数调用。在本例中,控制器仅包含一个名为contracts的函数(或“action”)。Action可能返回字符串(返回的网页)或Python字典(一组对应的键和值)或一组局部变量(如同本例)。若是函数返回字典,它将被传送给视图,该视图与控制器/函数同名,并返回一个网页。在本例中,函数contacts生成一个表db.user的选择(select)/搜索(search)/建立(create)/更新(update)/删除(delete)网格,并将该网格返回给视图。
“default/users.html”是视图
{{extend 'layout.html'}} <h1>users records</h1> {{=grid}}
界面显示:
数据库中的记录:
文件目录:
web2py是众多web应用框架中的一种,可是它有引人注目的、独特的功能。web2py最初被开发成一种教学工具,最初的开发动机以下:
WSGI [wsgi-w,wsgi-o] (Web服务器网关接口)是一种新兴的Web服务器和Python应用之间通讯的Python标准。