標籤:style blog http io ar color os 使用 sp
問題:如何為整個網站設計一套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
你可以使用強大的Regex去設計更加靈活的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規則更多的細節。
webpy學習筆記——理解URL處理