没有合适的资源?快使用搜索试试~ 我知道了~
首页Web2Py框架教程--部分已翻译成中文
Web2Py框架教程--部分已翻译成中文
需积分: 48 172 浏览量
更新于2023-05-30
评论
收藏 6.01MB PDF 举报
使用python编写的爬虫工具,从web2py官网爬下来并自动生成的的教程文档,各个章节带详细书签。由于官网只翻译了前面几部分的中文,因此后面有些是英文的内容。
资源详情
资源评论
资源推荐

Search
Complete translation to Chinese ia available in PDF!
web2py于2007年发布,经过4年持续发展,我们已经完成了期待已久的第4版撰写。在这期间,web2py赢得了成千上万
学识渊博用户和一百多位开发人员的喜爱。我们共同的努力创造了目前功能最全的开源web框架之一。
我最初将web2py作为一种教学工具,因为我相信,对于一个自由开放社会的发展,构建高品质web应用的能力是至关
重要的。发展web应用能防止信息垄断。这一动机是对的,现在看起来更迫切。
一般来说,web框架是为了让web开发更简单、更快捷,并降低开发者的失误,尤其是涉及安全的方面。在web2py中,
我们把解决这些问题作为三个主要目标:
容易使用
是web2py的首要目标。对我们来说,这意味着缩短学习和部署时间。这就是web2py采用全堆栈无依赖性的原
因。它无需安装和配置。在web2py中,每一项功能都
即开即用
,包括web服务器配置、数据库开发和基于web的集成开
发环境使用。API包含12个核心对象,这方便了用户记忆和使用。它能与绝大多数的web服务器、数据库以及所有的
Python库进行交互。
快速
开发是web2py的第二目标。web2py中每个函数都有一个默认的行为(该行为可被重写)。例如,一旦你指定了数
据模型,你就可以访问一个基于web的数据库管理面板。web2py还能自动为你的数据生成表单,这允许你方便的将数
据以HTML、XML、JSON、RSS等形式表现出来。
安全
是web2py的核心,这里我们的目标是锁定一切保持系统和数据安全。因此,我们的数据层消除SQL注入。模板语
言防止跨站点脚本漏洞。web2py生成的表单提供了字段验证,阻止跨站点请求伪造。密码总是在经过哈希运算之后才
存储。默认时,会话被存储在服务器端,以阻止cookie篡改;会话cookie采用uuid,以阻止cookie窃取。
web2py始终是从用户角度出发而设计,通过长期的内部优化变得更快和更精简,并保证
向后兼容性
。
web2py是免费使用的。如果您从中受益,我们希望您能以您选择的任何形式回报社会。
2011年,InfoWorld杂志评论了六个最流行的基于Python的全堆栈web框架,web2py名列第一。同年,web2py赢得最佳开
源开发软件奖Bossie Award。

Search
引言引言
web2py
[web2py]
是一种免费的、开源的web开发框架,用于敏捷地开发安全的、数据库驱动的web应用;web2py采用
Python
[python]
语言编写,并且可以使用Python编程。web2py是一个完整的堆栈框架,也就是说它包含了开发完整功能的
web应用所需的所有组件。
web2py被设计来指导web开发人员遵循良好的软件工程实践,如使用模型(Model)、视图(View)、控制器(Controller)
(MVC)模式。web2py将数据表达(the model)从数据表示(the view)和应用逻辑及工作流(the controller)中分开。
web2py提供的库可以帮助开发者分别设计、实施和测试MVC中的每一部分,并能使它们一起工作。
web2py是为了安全而构建的。这意味着遵循成熟的方法,它能自动处理许多可能导致安全漏洞的问题。例如,web2py
验证所有输入(防止注入攻击),转义所有输出(防止跨站点脚本攻击),重命名上传文件(防止目录遍历攻击)。
在与安全有关的方面,web2py没有留给应用程序开发人员选择的余地。
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的数据库管理接口来访问数据库和表。
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,这保证了
应用程序的后向兼容性。
web2py提供了一个票据系统。如果出现错误,系统会发出一个票据给用户,并记录错误信息供管理员查看。
web2py是开源的,在LGPL版本3许可证下发布。
web2py的另一个特点是开发者承诺在未来版本中保持后向兼容性。从2007年10月web2py首次发布至今,我们一直都是
这样做的。尽管web2py增加了新功能,修复了错误,然而如果一个程序在web2py1.0上能运行,那么它现在还能运行。
下面给出一些web2py语句的例子来展示它的功能和简洁性。代码如下:
1 db.define_table('person', Field('name'), Field('image', 'upload'))
以上代码创建了一个“person”数据库表,该表包含两个字段,即”name”字符串和”image”, image是需要上传的图片(实际
图片)。如果该表已经存在,但是与上述定义不匹配,则该表将会被妥善更改。
给定上述定义表,代码如下:
1 form = crud.create(db.person)
创建了一个插入表单,该表允许用户上传图片。它还会验证提交的表单,以安全的方式重命名上传的图片,并将图片
存储到文件中。同时,向数据库中插入相应记录,以防止重复提交。如果用户提交的数据未能通过验证,将通过添加
错误信息来修改表单。
代码如下:
1
2
@auth.requires_permission('read','person')
def f(): ....

上述代码将阻止访问者进入函数f,除非访问者所在的组有权限读取”person”中的记录。如果访问者未登录,他将被定
向到登陆页面(由web2py默认提供)。
下面的代码将嵌入页面组件:
1 {{=LOAD('other_controller','function.load',ajax=True, ajax_trap=True)}}
上述代码指示web2py以视图形式加载其它控制函数生成的内容(适用于任何函数)。它通过Ajax加载内容,并将内容
嵌入当前网页(使用当前布局而不是其它控制函数布局),这样就能捕获加载内容中的所有表单,这样不需要重新加
载网页也能通过Ajax提交表单。它也能LOAD非web2py应用的内容。
LOAD帮助对象允许应用程序的模块化设计;本书最后一章将对此进行论述。
原则原则
Python编程通常遵循以下基本原则:
不重复自己(DRY)。
仅有一种实现方式。
明确比含蓄更好。
在web2py中,通过强制开发者使用可靠成熟的软件工程实践,遏制代码重复,保证完全遵守前两条原则。web2py能指
导开发者完成几乎所有web应用开发中的常见任务(创建和处理表单,管理会话,小甜饼“cookie”,错误等等)。
request
web2py对第3个原则的处理与其它框架有所不同,有时与前两个原则相冲突。尤其是web2py不会导入用户应用,而是
在预定义的情况下执行。这会暴露Python和web2py关键字。
对某些人来说,这看起来就像魔术,但它不是这样的。简单地说,在实践中有些模块已经自动导入了,而不需要开发
者导入。web2py试图避免其它框架下存在的令人讨厌的特征,即开发者需要在每个模型和控制器的顶部导入相同的模
块。
web2py通过导入自有模块节约了时间,避免了错误,这遵循了不重复自己和仅有一种实现方式的精髓。
如果开发者想使用其它Python模块或第三方模块,这些模块必须明确导入,就像开发任何其它Python程序一样。
Web框架框架
PHP
ASP
JSP
在其最基本的层面上,web应用包含了一组程序(或者函数),当用户访问相应的URL时,该程序将被执行。同时,程
序的输出返回给用户,并呈现在浏览器中。
web框架是为了让开发者更快、更简便、无差错的开发新应用。它通过提供API和开发工具,以减少代码编写量。
开发web应用的两个经典方法是:
通过编程生成HTML
[html:w,html:o]
代码。
将代码嵌入HTML页面中。
早期的CGI脚本遵循第一种模型。下列脚本遵循第二种模型,例如PHP[php](代码用PHP编写,类似C语言)、
ASP(代码用Visual Basic编写)以及JSP(代码用Java编写)脚本。
这里举一个PHP程序的例子,执行时,从数据库中获得数据,并返回一个显示选中记录的HTML页面。
1 <html><body><h1>Records</h1><?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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代码来表达:
1
2
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,但它们之间的结
合没有原配组件那么紧密。
模型模型-视图视图-控制器(控制器(Model-View-Controller))
Model-View-Controller
web2py鼓励开发人员将数据表达(Model)、数据表示(View)和应用工作流(Controller)分离。让我们再考虑前面的
例子,看看如何围绕该例建立一个web2py应用。下面是一个web2py MVC编辑界面的例子。

web2py中一个请求的典型工作流描述如下:
在图中:
服务器可以是web2py内置服务器或第三方服务器,例如Apache。服务器可以处理多线程。
"main"是主要的WSGI应用。它负责处理所有常见任务和封装用户应用。它处理cookies、sessions、transactions、
URL地址解析及反向地址解析和分发。如果web服务器没有处理的话,它能服务和流静态文件。
Model、View、Controller组件构成了用户应用。
同一个web2py实例可以承载多个应用。
虚线箭头表示与数据库引擎的通信。数据库查询可以使用SQL语言(不推荐)或使用web2py DAL语言(推
荐),这样web2py应用代码不依赖于特定数据库引擎。
分发器将请求的URL映射成控制器中的函数调用。函数的输出可以是字符串或符号字典(哈希表)。字典中的数
据将被呈现成视图。如果用户请求HTML页面(默认情况),字典将被呈现成HTML页面。如果用户以XML请求
同一页面,web2py将会尝试找到一个能将字典呈现成XML格式的视图。开发人员可以创建视图将页面呈现成任
何已经支持的协议(HTML、XML、JSON、RSS、CSV、RTF)或者另外的自定义协议。
所有的调用都被封装到一个事务(transaction)之中,并且任何未捕获到的异常都将导致事务回滚。如果请求成功,
事务将被提交。
web2py还能自动处理sessions和session cookies,并且当事务被提交的时候,相应的session也被保存,除非有另有指
剩余311页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0