web2py官方文档翻译01
第一章:介绍
介绍
web2py(web2py)是一个免费的开源web框架的敏捷开发安全的数据库驱动的web应用程序,这是用Python编写的Python(Python)和可编程。web2py是一个完整的框架,也就是说,它包含了所有你需要的组件构建功能齐全的web应用程序。
web2py旨在引导web开发人员遵循良好的软件工程实践,如使用模型-视图-控制器(MVC)模式。web2py分离数据表示(模型)的数据显示(视图)和从应用程序逻辑和工作流(控制器)。web2py提供库来帮助开发人员设计、实现,和测试这三个部分分别,让他们一起工作。
web2py安全。这意味着它会自动解决的许多问题,可能导致安全漏洞,通过遵循良好的实践。例如,它验证所有输入(防止注射),逃离所有输出(防止跨站点脚本),重命名上传的文件(以防止目录遍历攻击)。web2py负责主要安全问题,因此开发人员较少引入漏洞的机会。
web2py包括一个数据库抽象层(DAL)动态SQL(sql-w)这样你写道,开发人员不需要。木豆知道如何生成SQL透明SQLite SQLite,MySQL(MySQL),PostgreSQL[postgres],该软件[该],火鸟火鸟,甲骨文(Oracle),IBM DB2(DB2),Informix(Informix)和安格尔(ingresdb)。
谷歌的木豆也能生成函数调用数据存储在Google App Engine(GAE)上运行(GAE)。实验我们支持多个数据库和新的不断补充道。请检查web2py网站和邮件列表的最近的适配器。一旦定义了一个或多个数据库表,web2py自动生成一个功能齐全的web数据库管理界面来访问数据库和表。
web2py与其他web框架的不同之处在于,它是唯一框架完全接受web 2.0模式,网络是计算机。事实上,web2py不需要安装或配置,它运行在任何体系结构,可以运行Python(Windows,Windows CE,Mac OS X,iOS和Unix / Linux),和开发、部署和维护阶段的应用程序可以通过一个本地或远程web界面。web2py运行与CPython(C实现)和PyPy(Python编写的Python),Python版本2.5,2.6和2.7。
web2py提供票务系统错误事件。如果出现错误,一张票发给用户,管理员的错误记录。
web2py是开放源代码的,版本3 LGPL许可下发布。
web2py是我们的另一个重要特性,它的开发人员,致力于保持在未来版本的向后兼容性。首次发布以来,我们已经这么做了web2py去年10月,2007年。添加了新功能和错误已经修复,但如果一个程序使用过web2py 1.0,今天计划将工作更好。
这里有一些例子web2py语句,说明它的力量和简单性。下面的代码:
db。define_table(‘人’,字段(“名字”),字段(“形象”,“上传”))
创建一个数据库表称为“人”两个字段:“名字”,一个字符串;和“图像”,需要上传(实际的图像)。如果表已经存在但不匹配这个定义,它是适当的改变。
鉴于上面的表定义,下面的代码:
形式= SQLFORM(db.person).process()
创建这个表的插入表单,允许用户上传图像。它也验证提交的表单,以安全的方式重命名上传图像,将图像存储在一个文件,插入相应的记录在数据库中,防止双屈服,最终修改表单本身通过添加错误消息,如果用户提交的数据没有通过验证。
这段代码嵌入一个完全工作wiki标记,搜索,标签云,权限,媒体附件,和oembed支持:
def指数():返回auth.wiki()
下面的代码:
@auth.requires_permission(“读”,“人”)
def f():....
阻止游客访问成员函数f,除非客人是一组其成员的权限“读”表中“人”的记录。如果用户没有登录,游客被定向到一个登录页面(默认情况下通过web2py提供)。
web2py还支持组件,即行为可以装载在一个视图和与游客通过Ajax交互没有通条和枪管撞击整个页面。这是通过一个负载助手允许模块化设计的应用程序;它是在第三章讨论在wiki的背景下,在一些细节,在这本书的最后一章。
这第六版的书描述了web2py 2.4.1和后来的版本。
原则
Python编程通常遵循这些基本原则:
不要重复自己(干)。
应该只有一个做事的方式。
显式优于隐式。
web2py完全包含前两个原则,迫使开发人员使用良好的软件工程实践,减少重复代码。web2py指导开发人员完成几乎所有web应用程序开发中常见的任务(创建和处理形式,管理会议,饼干,错误,等等)。
web2py不同于其他框架对第三原则,有时与其他两个冲突。特别是web2py不导入用户应用程序,但他们在一个预定义的上下文中执行。这种情况下暴露了Python的关键词,以及web2py关键词。
这可能会出现一些魔法,但它不应该。简单,在实践中,一些模块已经没有你这样做进口。web2py试图避免恼人的其他框架的特点,迫使开发人员导入相同的每个模型和控制器模块的顶部。
web2py,通过导入自己的模块,节省时间,防止错误,因此在“不要重复自己”的精神和“应该有只有一个做事的方式”。
如果开发人员希望使用其他Python模块或第三方模块,这些模块必须显式导入,如其他Python程序。
Web框架
在最基本的层面上,web应用程序由一组程序(或函数)时执行相应的URL访问。程序的输出返回给游客和浏览器呈现的。
web框架的目的是为了使开发人员能够快速构建新的应用程序,轻松,没有错误。这是通过提供的api和工具,减少和简化编码所需的数量。
开发web应用程序的两种经典的方法是:
以编程方式生成HTML(html-w][html-o]。
将代码嵌入到HTML页面。
第一个模型是之后,例如,通过早期的CGI脚本。第二个模型,例如,通过PHP(PHP)(PHP代码,一个c语言),ASP在Visual Basic(代码),和JSP(Java代码)。
这是一个PHP程序的一个例子,执行时,从数据库中检索数据,并返回一个HTML页面显示选中的记录:
身体< html > < > < h1 > < / h1 > <记录?
mysql_connect(主机、用户名、密码);
@mysql_select_db(数据库)或死亡(“无法选择数据库”);
查询美元= " SELECT * FROM联系人”;
美元$结果= mysql_query(查询);
mysql_close();
$ i = 0;
美元($我< mysql_numrows(结果)){
结果(name = mysql_result美元,美元我,“名字”);
$电话= mysql_result(因此,美元我,“电话”);
回声”< b >美元名字< / b > < br >电话:电话美元< br / > < br / > <人力资源/ > < br / >”;
美元我+ +;
}
身体? > < / > < / html >
这种方法的问题是,代码嵌入到HTML,但同一代码也需要生成额外的HTML和生成SQL语句来查询数据库,涉及到多层的应用程序,使其难以阅读和维护。Ajax应用程序的情况更糟,和复杂性增加的页数(文件)的应用程序。
上面的例子中可以表达的功能在web2py两行Python代码:
def指数():
返回的HTML(身体(H1(记录),db().select(db.contacts.ALL)))
在这个简单示例中,HTML页面结构表示HTML编程,身体,和H1对象,查询数据库db的select命令;最后,一切都是序列化成HTML。请注意,db不是关键字而是一个用户定义的变量。我们将使用这个名字一直引用一个数据库连接,以避免混乱。
Web框架通常分为两种类型:“粘”框架是由装配(粘在一起)几个第三方组件。一个“完整的框架是由创建组件专门紧密集成和协同工作。
web2py是一个完整的框架。几乎所有的组件都是从零开始,是为了一起工作,但他们完整的web2py框架之外的函数一样。例如,数据库抽象层(DAL)或可以使用模板语言独立于web2py框架通过导入胶子。木豆或胶子。到自己的Python应用程序的模板。胶子是web2py模块的名称,包含系统库。一些web2py库,如建筑和处理形式从数据库表,web2py依赖于其他部分。web2py也可以使用第三方Python库,包括其他模板语言和木豆,但是他们不会像紧密集成与原始组件。
模型-视图-控制器
web2py鼓励开发人员独立的数据表示(模型),数据显示(视图)和应用程序工作流(控制器)。让我们再考虑前面的例子,看看如何构建一个web2py应用程序。这是一个例子的web2py MVC编辑界面: