显示标签为“web2py”的博文。显示所有博文
显示标签为“web2py”的博文。显示所有博文

2009年5月25日星期一

[web2py]DAL中隐藏的秘密:limit和orderby desc

web2py 有所有新兴开源项目的通病:文档落后于代码。
例如,你在document下的DAL相关文档里,只能读到orderby的用法,但是没有告诉你如何desc。在该文档中也找不到limit的介绍。
其实这两个功能都很重要,分页几乎是现代数据库应用中必备的功能,limit关键字就是为此而诞生的。而对于不能任意split(我查了web2py的源码才发现小于0的索引SQLROWS直接抛异常),又不能直接reverse的DAL数据集,倒排查询就是很重要的功能了。
其实这两个功能DAL都有。
oderby的支持看来开发人员还没有找到很好的形式,例如,我们可以 orderby=db.ta.id,但是没有一个descorderby=db.ta.id,不过其实我们可以 orderby="ta.id desc",这样看起来有点怪,但是可用,而且不算很难理解。
limit关键字参数的支持就自然很多,类似标准SQL,DAL的limit支持两种形式:
limit=n,取数据集前n项。
limit=(n,m)从m项起取前n项,等效于PG的limit n offset m
--
杀人放火金腰带,补路修桥无尸骸。

……

劉鑫
March.Liu

web2py 的自定义路径

Web2py不同于django和web.py的一个特色,它自然的就是restful的形式。当然这也造成了一定的限制,就是我们有时候不能方便的自定义请求的路径。
其实Web2py一样可以自定义请求路径。只是它默认情况下没有给出这个配置。简而言之,在web2py的根目录下有一个 routers.examples.py,只要看那个文件的内容,就可以参照着写出自己的routers.py了:)。它采用的是类似django和 web.py的正则表达式重定向形式。
--
杀人放火金腰带,补路修桥无尸骸。

……

劉鑫
March.Liu

web2py 的远程开放

web2py是一个有趣的框架,它的特色之一就是在页面上集成了一个简单的开发环境。但是这个前提是只能从127.0.0.1访问,否则会提示你"不是安全通道"。
那么,是不是就没有办法把代码集中部署到一个远程服务器上开发了?
后来,我在web2py的官网上搜索到一个方法,,就是通过ssh映射远程端口到本地,可以实现远程开发。例如,我在192.168.0.13主机上run了一个web2py示例:
python web2py.py -i 0.0.0.0

那么我就从本机:

ssh -L 8000:127.0.0.1:8000 192.168.0.13

登录之后,如果再从浏览器访问 http://127.0.0.1:8000 ,打开的就是远程主机的回环IP。此时,就可以对远程的站点项目进行开发了。由于Web2Py提供了编辑冲突保护,甚至我们可以用这种方法进行团队集中式开发。

当然,我还是建议尽可能走成熟的版本管理系统进行开发。一个比较好的模式是每个团队成员在本机有一个开发环境,在测试服务器上有一个集中的环境,成员通过分布式版本管理系统——例如Python和OpenJDK项目使用的mercurial,或web2py和ubuntu项目使用的bzr——与测试服务器上的中心仓库同步,就可以实现比较理想的写作效果。更严格的管理模式,可以使用一个SVN,然后对可集成的分支挂一个hook,使其可以在有用户commit后自动发布到测试/生产服务器。

在这种情况下,通过ssh远程进入web2py的开发环境,也可以帮助我们获取错误信息,仍然是一项很有意义的技巧。
--
杀人放火金腰带,补路修桥无尸骸。

……

劉鑫
March.Liu