Webpy

Web.py Cookbook 简体中文版欢迎来到web.py 0.3的Cookbook 。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。格式1. 在编排内容时,请尽量使用coo

Web.py Cookbook 简体中文版

欢迎来到web.py 0.3的Cookbook 。提醒您注意:某些特性在之前的版本中并不可用。当前开发版本是0.3。

格式

1. 在编排内容时,请尽量使用cookbook 格式... 如:

问题:如何访问数据库中的数据?

解法:使用如下代码...

2. 请注意,网址中不必含有"web" 。如"/cookbook/select",而非"/cookbook/web.select"。

3. 该手册适用于0.3版本,所以您在添加代码时,请确认代码能在新版本中工作。

基本应用:

∙ ∙ ∙

∙ ∙ ∙

,

高级应用

∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ Sessions and user state 会话和用户状态:

∙ ∙ ∙ ∙ ∙ ∙ ∙

Utils 实用工具:

∙ ∙

,

Templates 模板

∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ Testing 测试:

∙ ∙

User input 用户输入:

∙ ∙ ∙ ∙

,

∙ ∙

Database 数据库

∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙

Deployment 部署:

mod_python deployment through Apache (requested)

∙ ∙ ∙ ∙ ∙ ∙ ∙

,

Subdomains 子域名:

Subdomains and how to access the username (requested) Hello World!

问题

如何用web.py 实现Hello World!?

解法

URL 开头添加代码:

然后用redirect 类处理以'/'结尾的网址:

,

提供静态文件 (诸如js 脚本, css样式表和图象文件) 问题

如何在web.py 自带的web server中提供静态文件访问?

解法

在当前应用的目录下,创建一个名为static 的目录,把要提供访问的静态文件放在里面即可。

例如, 网址 http://localhost/static/logo.png 将发

送 ./static/logo.png 给客户端。

理解URL 控制

问题: 如何为整个网站设计一个URL 控制方案 / 调度模式 解决:

web.py 的URL 控制模式是简单的、强大的、灵活的。在每个应用的最顶部,你通常会看到整个URL 调度模式被定义在元组中:

,

这些元组的格式是: URL 路径, 处理类 这组定义有多少可以定义多少。如果你并不知道URL 路径和处理类之间的关系,请在阅读cookbook 之前先阅读,或者快速入门。

路径匹配

你可以利用强大的正则表达式去设计更灵活的URL 路径。比如

/(test1|test2) 可以捕捉 /test1 或 /test2。要理解这里的关键,匹配是依据URL 路径的。比如下面的URL:

这个URL 的路径是 /myapp/greetings/hello。web.py 会在内部给URL 路径加上^和$ ,这样 /tasks/ 不会匹配 /tasks/addnew。URL 匹配依赖于“路径”,所以不能这样使用,如: /tasks/delete?name=(. ) ,?之后部分表示是“查询”,并不会被匹配。阅读URL 组件的更多细节,请访问。

捕捉参数

你可以捕捉URL 的参数,然后用在处理类中:

在 list/后面的这块会被捕捉,然后作为参数被用在GET 或POST:

,

你可以根据需要定义更多参数。同时要注意URL 查询的参数(?后面的内容) 也可以用取得。

开发子程序的时候注意

为了更好的控制大型web 应用,web.py 支持子程序。在为子程序设计URL 模式的时候,记住取到的路径(web.ctx.path)是父应用剥离后的。比如,你在主程序定义了URL"/blog"跳转到'blog' 子程序,那没在你blog 子程序中所有URL 都是以"/"开头的,而不是"/blog"。查看取得更多信息。

跳转(seeother)与重定向(redirect)

web.seeother 和 web.redirect

问题

在处理完用户输入后(比方说处理完一个表单),如何跳转到其他页面?

POST 方法接收到一个post 并完成处理之后,它将给浏览器发送一个303消息和新网址。接下来,浏览器就会对这个新网址发出GET 请求,从而完成跳转。

注意:web.seeother 和web.redirect 不支持0.3以下版本。

,

区别

用web.redirect 方法似乎也能做同样的事情,但通常来说,这并太友好。因为web.redirect 发送的是301消息-这是永久重定向。因为大多数Web 浏览器会缓存新的重定向,所以当我们再次执行该操作时,会自动直接访问重定向的新网址。很多时候,这不是我们所想要的结果。所以在提交表单时,尽量使用seeother 。但是在下面要提到的这种场合,用redirect 却是最恰当的:我们已经更改了网站的网址结构,但是仍想让用户书签/收藏夹中的旧网址不失效。

(注:要了解seeother 和redirect 的区别,最好是看一下http 协议中不同消息码的含义。)

使用子应用

问题

如何在当前应用中包含定义在其他文件中的某个应用?

解法

在blog.py 中:

,

当前的主应用code.py :

提供XML 访问

问题

如何在web.py 中提供XML 访问?

如果需要为第三方应用收发数据,那么提供xml 访问是很有必要的。 解法

标签: