在Python 2.7下面使用webpy框架

开始

你知道Python同时你希望制作一个网站。 那么web.py正好提供了一种简单的方法。

如果你希望读完整个指南, 你需要安装Python, web.py, flup, psycopg2, 和Postgres (或者等价的数据库和Python驱动)。 详细,可以查看 webpy.org.

如果你已经有了一个web.py项目,请看看升级 页面的相关信息。

准备开始。

URL 处理

任何网站最重要的部分就是它的URL结构。你的URL并不仅仅只是访问者所能看到并且能发给朋友的。它还规定了你网站运行的心智模型。在一些类似del.icio.us的流行网站 , URL甚至是UI的一部分。 web.py使这类强大的URL成为可能。

在开始你的web.py程序之前,打开一个文本文件(文件名为code.py)输入:

import web

这条语句会导入web.py模块。

现在我们需要把我们的URL结构告诉web.py。让我从下面这个简单的例子开始:

urls = ( '/', 'index' )

第一部分是匹配URL的正则表达式,像<font face="Courier New">/</font><font face="Courier New">/help/faq</font><font face="Courier New">/item/(\d+)</font>等(<font face="Courier New">\d+</font>将匹配数字)。圆括号表示捕捉对应的数据以便后面使用。第二部分是接受请求的类名称,像<font face="Courier New">index</font><font face="Courier New">view</font><font face="Courier New">welcomes.hello</font>(<font face="Courier New">welcomes</font>模块的<font face="Courier New">hello</font>类),或者<font face="Courier New">get_\1</font><font face="Courier New">\1</font> 会被正则表达式捕捉到的内容替换,剩下来捕捉的的内容将被传递到你的函数中去。

这行表示我们要URL<font face="Courier New">/</font>(首页)被一个叫<font face="Courier New">index</font>的类处理。

现在我们需要创建一个列举这些url的application。

app = web.application(urls, globals())

这会告诉web.py去创建一个基于我们刚提交的URL列表的application。这个application会在这个文件的全局命名空间中查找对应类。

GET和POST: 区别

现在我们需要来写<font face="Courier New">index</font>类。虽然大多数人只会看看,并不会注意你的浏览器在使用用于与万维网通信的HTTP语言。具体的细节并不重要,但是要理解web访问者请求web服务器去根据URL(像<font face="Courier New">/</font><font face="Courier New">/foo?f=1</font>)执行一个合适的函数(像<font face="Courier New">GET</font><font face="Courier New">POST</font>)的基本思想。

<font face="Courier New">GET</font>是我们都熟悉的。它用于请求网页文本。当你在浏览器输入<font face="Courier New">harvard.edu</font>,它会直接访问Harvard的web服务器,去<font face="Courier New">GET /</font>。 第二个最有名的是<font face="Courier New">POST</font>,它经常被用在提交form,比如请求买什么东西。每当提交一个去做什么事情(像使用信用卡处理一笔交易)的请求时,你可以使用<font face="Courier New">POST</font>。这是关键,因为<font face="Courier New">GET</font>的URL可以被搜索引擎索引,并通过搜索引擎访问。虽然大部分页面你希望被索引,但是少数类似订单处理的页面你是不希望被索引的 (想象一下Google尝试去购买你网站上的所有东西)。

在我们web.py的代码中,我们将这两个方法明确区分:

class index: def GET(self): return "Hello, world!"

当有人用<font face="Courier New">GET</font>请求<font face="Courier New">/</font>时,这个<font face="Courier New">GET</font>函数随时会被web.py调用。

好了,限制我们只需要最后一句就写完了。这行会告诉web.py开始提供web页面:

if __name__ == "__main__": app.run()

这会告诉web.py为我们启动上面我们写的应用。

现在注意,即使我已经在这里说了很多,但我们真正有5行这些代码。这就是你需要编写的一个完整的web.py应用。如果你在命令行下面,请输入:

$ python code.py http://0.0.0.0:8080/

下面附上我写的一段代码:

如下所示:

  1. ''''' 
  2. Created on 2011-11-29 
  3.  
  4. @author: LONMID 
  5. '''  
  6. import web  
  7.   
  8. urls = (  
  9.     '/(.*)''hello'  
  10. )  
  11. app = web.application(urls, globals())  
  12.   
  13. class hello:          
  14.     def GET(self, name):  
  15.         if not name:   
  16.             name = 'World'  
  17.         return 'Hello, ' + name + '!'  
  18.   
  19. if __name__ == "__main__":  
  20.     app.run()  
在地址栏输入: http://localhost:8080/ 即可

打印出Hello, World!

输入库http://localhost:8080/mingg

打印出Hello, mingg!

相关推荐