因為看過django的url匹配功能,發現其模組耦合性的設計非常好,而之前用webpy寫的一個工具,因為後來不斷的添加功能導致產生N多的url匹配;所以就想看看webpy有沒有這個功能可以簡化一下url的匹配,還有就是分離url和實際處理模組之間的耦合度。
百度查了一下,結果不好使,webpy用的人本來就少,可恨google是沒法用,最後只有直接去看看是否能解決問題。好就好在按照django亂配了一通後有報錯,跟著報錯找到了具體的處理url的位置,稍微看了下源碼;貌似這塊處理還比較簡單的,所以就是試了一下。得知webpy也可以支援url跳轉配置,不過要用關鍵字,想要動態根據url的內容來映射對應的處理類,預設是沒有的,不過只要稍微添加一行代碼就可以添加一個簡易的此類功能。具體如下:
在url中配置跳轉:
urls = ( '^/seleniumdoc/$', 'redirect /seleniumdoc/index', )
使用的是redirect關鍵字,後面是空格再加藥跳轉的地址。
在url中動態映射到處理類:
1、修改webpy的源碼檔案【site-packages/web/application.py】403行後添加一句處理語句
402 raise web.redirect(url)403 elif '.' in f:404 f = f % tuple(args) ##這句是添加的405 mod, cls = f.rsplit('.', 1)2、在url中配置格式如下:
urls = ( '^/pythonapi/([^/]+)$', pre_fix + 'pythonapi.%s', )
這樣在執行是就會把url中匹配的內容傳給了對應的字串預留位置%s;不過這個有一個不好就是必須是順序的,不能打亂順序,想要像django那樣的匹配就需要更多的處理了。就要添加帶索引的預留位置,或者用索引值;在處理函數中替換這些預留位置為對應的url正則匹配到的內容。稍微多處理了一下,不過在需要的時候,添加這個功能還是有必要的。