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编辑界面:
web2py官方文档翻译01的更多相关文章
- web2py官方文档翻译
00前言 我相信能够轻松地构建高质量增长的web应用程序是至关重要的一个自由和开放的社会.这可以防止玩家最大的垄断信息的流通. 因此我从2007年开始web2py项目,主要是作为一种教学工具与简化we ...
- CALayer---iOS-Apple苹果官方文档翻译之CALayer
CHENYILONG Blog CALayer---iOS-Apple苹果官方文档翻译之CALayer CALayer /*技术博客http://www.cnblogs.com/ChenYilong/ ...
- kong插件官方文档翻译
kong插件官方文档翻译 目录 介绍 文件结构 编写自定义逻辑 存储配置 访问数据存储 自定义实体 缓存自定义实体 扩展Admin API 编写测试 (卸载)安装你的插件 插件开发 - 介绍 什么是插 ...
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点
Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)
Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...
- 蓝牙4.0——Android BLE开发官方文档翻译
ble4.0开发整理资料_百度文库 http://wenku.baidu.com/link?url=ZYix8_obOT37JUQyFv-t9Y0Sv7SPCIfmc5QwjW-aifxA8WJ4iW ...
- GreenDao官方文档翻译(上)
笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...
- Aircrack-ng官方文档翻译[中英对照]---Airdecap-ng
Aircrack-ng官方文档翻译---Airdecap-ng Description[简介] With airdecap-ng you can decrypt WEP/WPA/WPA2 capt ...
- Aircrack-ng官方文档翻译[中英对照]---Airmon-ng
Aircrack-ng官方文档翻译---Airmon-ng Description[简介] This script can be used to enable monitor mode on wire ...
随机推荐
- JavaMail简单接收邮件
一个简单的例子,收取所有邮件并在控制台输出. package cn.jmail.test; import java.io.*; import java.util.*; import javax.mai ...
- 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
因为最近更新的PHP版本,写sql语句,忽然发现不能用了,上网查了一些原因,找到几个方法如下: 1.禁止php报错 display_errors = on 改成 display_errors = of ...
- linux 内核开发基础
开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性
- synchronized 方式实现监控器中数据成员的同步
要对监控器中的数据成员进行访问,在考虑到多线程的情况下必须使用同步代码块来改变监控器中数据成员的值: synchronized (mAdapterLocking) { if (pEvery == 0) ...
- mini-httpd源码分析-mini-httpd.c
main函数分析: 一,参数设置: 读取命令行参数 配置文件参数 读取参数,设置对应的全局变量.主要参数有:配置文件:资源目录:进程ID文件:日志文件:字符集:主机名及端口号... 二,参数处理:重点 ...
- CentOS下安装Nginx并添加nginx_upload_module
安装前,最好能保证依赖的系统软件已经升级. yum update CentOS上安装Nginx,如果只是简单安装,不附加其他第三方模块,一句话可以搞定: yum install nginx ...
- C#实现在winfrom程序中下载文件
//下载文件//downlaodUrl 系统路径如:http://xxx.xxx.xxx/UpFile/kaoqin.doc//fileName 自定义文件名字加后缀(如:考勤.doc)//fileP ...
- Qt之QTemporaryFile(文件名唯一,且可以自动删除)
简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...
- 去掉ExpandableListView的箭头图标
到ExpandableListView时有个箭头图标系统自带的在你自定义布局也不能去掉只要设置一个属性即可,如下: settingLists.setGroupIndicator(null); ~~~ ...
- Java GC 日志详解(转)
Java GC日志可以通过 +PrintGCDetails开启 以ParallelGC为例 YoungGC日志解释如下(图片源地址:这里) : FullGC(图片源地址:这里): http://blo ...