`
isiqi
  • 浏览: 16491563 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多

安装

要完成整个教程,你需要安装web.py, flup, Cheetah, psycopg2 Postgres 更多安装方面的细节请见web.py主页.

URL处理

在你的编辑器中打开一个新文件,取名code.py。输入以下代码:

import web

 

这会导入web.py框架。

urls = (

 '/', 'view'

)

 

这是URL到函数的映射列表。第一部分是一个正则表达式,它用来匹配一个路径,例如如/, /help/faq, /item/(\d+), 等等。 (代码 \d+ 匹配的是数字串。括号表示保留匹配上的这部分内容留做以后使用。)第二部分是接收请求的类的名称,例如 viewwelcomes.hello(表示 welcomes 模块的 hello 类), get_\1 \1 被替换为正则表达式所保留的第一部分内容;其他保留的匹配内容被传递给函数。

class view:

 def GET(self):

这是hello类和它的GET函数。可能你已经猜到了,当有人调用HTTP GET方法时GET函数就会被调用(即有人访问你的URL时)。

 print "Hello, world!"

这会返回纯文本 'Hello, world!' 给访问者。

web.internalerror = web.debugerror

这一行告诉web.py,当发生错误时显示调试信息页。当站点正式启动后你应该把这行去掉以免用户看到它。

if __name__ == '__main__': web.run(urls, web.reloader)

这告诉web.py当本文件被执行时运行你的代码。第一个参数 urls 是前面定义的URL到函数的映射。另一个参数是一个中间件”(middleware) —— 用来协助部分程序的封装函数(wrapper functions)。这里我们用的是reloader,当源代码发生变化时它会自动重新加载代码,这样我们就不用每次都重启服务了。站点正式启动后你可能会把想把它取消掉,但是当开发的时候这个功能是极为有用的。还有一个中间件 web.profiler,它会输出每个函数运行所用的时间,这样你可以想办法让你的代码快一点儿。

执行 python code.py 来启动一个运行你的程序的web服务器,(要运行在8002端口,执行 python code.py 8002)。你也可以让code.pyCGI脚本或FastCGI脚本的形式运行 —— 它会自动处理好。(由于 web.py 基于 WSGIPython web程序接口标准,你可以用它在各种环境中,包括mod_python

现在用浏览器访问你的站点,应该会看到 'Hello, world!'

模板(Templates)

新建一个templates目录,在该目录中打开一个新的.html文件,命名为 view.html

#if $name

 I just wanted to say hello to $name.

#else

 Hello, world!

#end if

现在回到 code.py。编辑view.GET为以下内容:

 name = 'Bob'

 web.render('view.html')

现在用浏览器访问你的站点,应该会看到 'hello to Bob'

这些模板是Cheetah 模板。所有的重要特性都可以在 一页纸教程中找到 —— 基本上,它们就像是嵌入HTML(或其他任何格式)的Python代码。

警告: 现在的计划是用一种简单一点但更强大的模板来取代Cheetah。这一模板格式已经设计好了,但是实现还没有完成。

自定义 URLs

编辑你的urls为:

 '/(.*)', 'view'

现在改变view.GET的定义为:

 def GET(self, name):

并删掉给name变量赋值的语句。

现在如果你访问 /Joe 应该能看到页面显示 'hello to Joe' 如果你访问 /,则应该显示'Hello, world!'

数据库交互

web.run 那一行之上,加入:

web.db_parameters = dict(dbn='postgres', user='me', pw='pass', db='dbname')

根据你的数据库设置相应改变这些值(例如,MySQL用户可能要把dbn的值改为mysql)。

在你的数据库中创建一个简单的表:

CREATE TABLE todo (

 id serial primary key,

 title text,

 created timestamp default now(),

 done boolean default 'f'

);

以及一个示例行:

INSERT INTO todo (title) VALUES ('Learn web.py');

回到 code.py, 将这一行加到view.GET的顶部:

 todos = web.select("todo")

编辑 view.html 为:

<ul>

 #for todo in $todos

 <li id="t$todo.id">$todo.title</li>

 #end for

</ul>

现在访问你的网站应该能看到你的todo条目: 'Learn web.py'

view.html 的尾部加入:

<form method="post" action="add">

<p><input type="text" name="title" /> <input type="submit" value="Add" /></p>

</form>

urls 列表改为:

 '/', 'view',

 '/add', 'add'

编辑 view.GET 去掉多余的参数:

 def GET(self):

 

view 类后面加入:

class add:

 def POST(self):

 i = web.input()

 n = web.insert('todo', title=i.title)

 web.seeother('./#t'+str(n))

web.insert 返回新插入条目的id,然后 web.seeother 重定向用户到该条目。

速览: web.transact() 开始一次交易(transaction)web.commit() 提交它; web.rollback() 回溯。 web.update 类似 web.insert 但是它不是返回id而是接受id在表名之后做为参数(或一个WHERER子句字符串)。

现在你可以添加 todo 条目到列表中了。

另附: 存储对象

web.input web.query 以及web.py中的其他一些东西会返回存储对象”("Storage objects")。一个存储对象就像一个字典(dictionary),但是d.food['foo']是一样的。这省去了很多打字时间。

Cookies

<!-- Work into examples. -->Cookies web.input 的工作方式基本是一样的。 web.cookies() 返回一个包含所有已设置cookies的存储对象。 web.setcookie(name, value, expires="") 用来设置cookies

web.input web.cookies 接受一些参数和关键词参数。例如,如果你调用 web.input('color', times=1),而它没接收到叫color的查询参数,它会抛出错误;如果没接收到 times 参数它会将其设为1

一种常见做法是:

try: i = web.input('foo', bar=2)

except KeyError: return web.badrequest()

分享到:
评论

相关推荐

    PyPI 官网下载 | fastweb-1.4.0.2.tar.gz

    《PyPI官网下载 | fastweb-1.4.0.2.tar.gz——深入解析Python库FastWeb》 PyPI(Python Package Index),是Python社区官方的软件包仓库,提供了丰富的Python库供开发者下载和使用。在PyPI官网上,我们可以找到名为...

    Python库 | oarepo-3.2.0.2a9-py2.py3-none-any.whl

    文件名 `oarepo-3.2.0.2a9-py2.py3-none-any.whl` 中的 `py2.py3` 指示这个库兼容Python 2和Python 3,`none-any` 表示它不依赖特定的系统或架构,可以在任何支持Python的平台上运行。 **Python开发语言** Python...

    PyPI 官网下载 | lbt_honeybee-0.2.56-py2.py3-none-any.whl

    **PyPI 官网下载 | lbt_honeybee-0.2.56-py2.py3-none-any.whl** PyPI(Python Package Index)是Python编程语言的官方软件仓库,它提供了大量的开源Python库供开发者下载和使用。在Python开发中,通过PyPI可以方便...

    Python库 | flaskify-0.2-py2.py3-none-any.whl

    总的来说,"flaskify-0.2-py2.py3-none-any.whl"是一个针对Python 2和3双版本兼容的Flask扩展库,它的存在是为了增强Flask的原生功能,提供更加方便的Web应用开发体验。对于使用Flask框架的开发者来说,理解和掌握...

    Python库 | saltyrtc.server-1.0.2-py34.py35.py36-none-any.whl

    它主要用于实现安全的、低延迟的实时通信协议,特别是适用于WebRTC(Web Real-Time Communication)场景。在Python编程语言中,库或模块是可重复使用的代码单元,它们提供了特定的功能,帮助开发者快速构建应用程序...

    PyPI 官网下载 | collective.geo.openlayers-0.2.tar.gz

    《PyPI官网下载 | collective.geo.openlayers-0.2.tar.gz 深度解析》 在Python的世界里,PyPI(Python Package Index)是开发者们不可或缺的资源库,它为Python社区提供了大量的开源软件包。今天我们将聚焦于一个...

    Python库 | manga_py-1.2.0.2.tar.gz

    这个库的资源以manga_py-1.2.0.2.tar.gz的形式提供,是Python开发语言在后端应用的一个典型实例。 manga_py库主要面向那些想要自动化下载网络漫画的用户。它利用Python的网络爬虫技术,能够从各种漫画网站抓取并...

    Python库 | tomcom.plone.easyvoc-4.3.0.2.zip

    标题中的"Python库 | tomcom.plone.easyvoc-4.3.0.2.zip"指的是一款基于Python开发的库,名为`tomcom.plone.easyvoc`,其版本号为4.3.0.2。这个库是专门为Plone内容管理系统设计的,Plone是一种流行的开源内容管理...

    PyPI 官网下载 | poutyne_transformers-0.1.0.2-py3-none-any.whl

    **PyPI 官网下载 | poutyne_transformers-0.1.0.2-py3-none-any.whl** PyPI(Python Package Index)是Python社区的官方软件仓库,它为全球的Python开发者提供了一个发布、查找和安装Python模块的平台。在Python...

    PyPI 官网下载 | collective.recipe.supervisor-0.2.tar.gz

    《PyPI官网下载collective.recipe.supervisor-0.2.tar.gz——深入了解Python库与Supervisor管理工具》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供用户下载和使用。在PyPI...

    PyPI 官网下载 | django-cities-0.5.0.2.tar.gz

    **PyPI 官网下载 | django-cities-0.5.0.2.tar.gz** ** Django Cities 库详解** Django Cities 是一个基于 Python 的 Django 框架的扩展库,用于处理地理信息数据,如城市、地区、国家等。在 PyPI(Python Package...

    PyPI 官网下载 | collective.isotope-0.2.tar.gz

    本文将围绕PyPI官网下载的“collective.isotope-0.2.tar.gz”这一Python库进行详细介绍。 首先,PyPI是Python生态系统的重要组成部分,它为开发者提供了一个集中发布和获取Python模块、脚本和工具的地方。通过PyPI...

    PyPI 官网下载 | mypy_boto3_pi-1.14.0.2-py3-none-any.whl

    【PyPI 官网下载 | mypy_boto3_pi-1.14.0.2-py3-none-any.whl】 PyPI(Python Package Index)是Python社区的主要软件包资源库,它为开发者提供了一个发布、查找和安装Python模块的平台。在Python开发中,PyPI扮演...

    PyPI 官网下载 | tiddlywebplugins.voting-0.2.tar.gz

    《PyPI官网下载:tiddlywebplugins.voting-0.2.tar.gz——探索Python库的奥秘》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库供全球开发者下载和使用。在PyPI官网上,我们可以...

    Python库 | qt5_applications-5.14.0.2-py3-none-win_amd64.whl

    `qt5_applications-5.14.0.2-py3-none-win_amd64.whl`这个文件是针对Python 3编译的Qt5应用程序模块的轮子包(Wheel Package),它是一个预编译的二进制文件,适用于64位的Windows(win_amd64)系统。轮子包是Python...

    PyPI 官网下载 | plonetheme.intkBase-0.2.tar.gz

    标题中的"PyPI 官网下载 | plonetheme.intkBase-0.2.tar.gz"指的是Python Package Index(PyPI)上发布的名为"plonetheme.intkBase"的软件包,版本号为0.2,其源代码被压缩在了一个tar.gz文件中。PyPI是Python社区...

    Python库 | snakeviz-0.2-py2.py3-none-any.whl

    `snakeviz-0.2-py2.py3-none-any.whl`是一个Python的wheel文件,它是一种预编译的Python包格式,适用于跨平台的分发。这个文件适用于Python 2和Python 3环境,且不依赖特定的系统架构(none)或非通用的Python特性...

    Python库 | pytest_raisin-0.2-py2.py3-none-any.whl

    Python是一种广泛使用的高级编程语言,尤其在Web开发、数据分析、人工智能等领域有广泛应用。在Python的生态系统中,库扮演着至关重要的角色,它们提供了丰富的功能,让开发者能够更高效地完成工作。`pytest`是一个...

    PyPI 官网下载 | FWeb-0.2.tar.gz

    **PyPI 官网下载 | FWeb-0.2.tar.gz 知识点详解** PyPI,全称为Python Package Index,是Python社区官方维护的一个软件仓库,为开发者提供了一个发布和分享自己编写的Python模块、库或者工具的平台。用户可以通过...

    Python库 | plone.multilingualbehavior-0.2b3-py2.6.egg

    Python库`plone.multilingualbehavior-0.2b3-py2.6.egg`是专为Python 2.6版本设计的一个后端开发工具,主要用于实现多语言功能。在Web开发领域,尤其是在构建内容管理系统(CMS)时,提供多语言支持是一个非常重要的...

Global site tag (gtag.js) - Google Analytics