在其最基本的层面上,web应用包含了一组程序(或者函数),当用户访问相应的URL时,该程序将被执行。同时,程序的输出返回给用户,并呈现在浏览器中。
web框架是为了让开发者更快,更简洁,无差错的开发新应用。它通过提供API和开发工具,以减少代码的编写量。
开发web应用的两个经典方法是:
通过编程生成HTML代码
将代码嵌入HTML页面中
早期的CGI脚本遵循第一种模型。下列脚本遵循第二种模型,例如PHP[php](代码用PHP编写,类似C语言)、ASP(代码用VisualBasic编写)以及JSP(代码用Java编写)脚本。
这里举一个PHP程序的例子,执行时,从数据库中获得数据,并返回一个显示选中记录的HTML页面。
<html><body><h3>Records</h3><?mysql_connect(localhost,username,password);@mysql_select_db(database)ordie("Unabletoselectdatabase");$query="SELECT*FROMcontacts";$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代码来表达:
defindex():returnHTML(BODY(H1('Records'),db().select(db.contacts.ALL)))
在这个简单的例子中,页面结构由HTML,BODY和H1对象程序化表示;通过select语句查询数据库db;最后,所有结果都被序列化成HTML代码。注意db不是关键字,而是一个用户定义的变量。为了避免混淆,大家将始终使用db这一术语来指代数据库连接。
web框架通常分为两种类型:一种是“胶水”框架,通过组合(粘合)几个第三方组件来构造。另一种是“全功能栈”框架,通过创建特别设计的紧密整合和协作工作的组件来构造