webpy学习笔记——理解URL处理

问题:如何为整个站点设计一套URL处理和调度的方案?

解决方案:webpy的URL处理方案简单但是强大和灵活。在每个应用的顶部,你经常会看到一个在元组中定义的完整的URL调度方案。例如:

urls = (
    "/tasks/?", "signin",
    "/tasks/list", "listing",
    "/tasks/post", "post",
    "/tasks/chgpass", "chgpass",
    "/tasks/act", "actions",
    "/tasks/logout", "logout",
    "/tasks/signup", "signup"
)

这个元组的格式是:url-pattern-path,handler-class 这种模式会重复定义更多的URL模式。如果你不理解URL模式和处理类之间的关系,请查看Hello World example或者Quick Start Tutorial在你

阅读cookbook的其他部分之前。

 

路径匹配 path matching

 

你可以使用强大的正则表达式去设计更加灵活的URL模式。例如,/(test1|test2)会匹配/test1或/test2两者中任意一个。关键在于理解匹配发生在你的URL的路径上。

例如,以下的URL:

http://localhost/myapp/greetings/hello?name=Joe

该URL的路径是/myapp/greetings/hello 。webpy会在内部添加一个 ^ 和 $ 到url模式,这样,/tasks/就不会去匹配/tasks/addnew 这样的模式。当匹配路径时,你不能使用这样的模式:/tasks/delete?name=(.+)作为?后面的部分被称为query(字串),所以不能被正确匹配到。关于URL更详细的描述,请参考web.ctx

 

捕获参数 capture parameters

你可以把在URL模式中捕获到参数用于你的处理类中:

"/users/list/(.+)", "list_users"

在list/之后被捕获到的数据块可以作为参数被用在GET或者POST中:

class list_users:
    def GET(self, name):
        return "Listing info about user: {0}".format(name)

你可以定义多个参数。还要注意,URL字串中的参数(即出现在?后面的那部分)可以在使用web.input()被获取到。

 

在意在子应用中的情况 Note sub-application

 

为了更好的处理更大的web应用,webpy还支持sub-application  当你在给子应用设计URL方案时,请牢记,路径(web.ctx.path)会让父路径被剥夺。例如,如果在主应用中,你定义一个URL模式/blog

跳转到blog子应用,在你的blog子应用中所有的URL模式都会以 / 开始而不是 /blog 。查看 web.ctx 获取cookbook规则更多的细节。

 

posted @ 2014-12-13 22:56  ggjjl1  阅读(533)  评论(0编辑  收藏  举报