有通配符的路由叫做動態路由(相對於靜態路由來說),動態路由可以匹配多個URL。一個簡單的通配符由一對尖括號和裏面的名字組成(比如 <name>),通配符由'/'分隔。例如,/hello/<name> 這個路由接收 /hello/alice 也接收 /hello/bob,但是不匹配 /hello,/hello/ 或是 /hello/mr/smith。
URL總每個通配符位置的值會當做參數傳入相應回調函數。你能直接用這種方式實現RESTful,好看的和有意義的URL。這是另一些例子:
@route('/wiki/<pagename>') # matches /wiki/Learning_Python
def show_wiki_page(pagename):
...
@route('/<action>/<user>') # matches /follow/defnull
def user_api(action, user):
...
過濾器(Filters)能被用來定義更加複雜的通配符,URL的相應部分要先經過過濾再傳給回調函數。含過濾器的通配符形式如<name:filter>或者是<name:filter:config>。可選的config部分取決於過濾器的種類。
以下是目前默認存在的過濾器:
- : int,只匹配整數,並且將值轉爲整形。
- :float,跟 :int 類似,只是針對浮點數的。
- :path,用一種非貪婪的方式陪陪所有的字符(包括'\'字符),且能匹配多個路徑部分。
- :re,允許你用正則表達式進行匹配,匹配的值不會進行格式轉換。
@route('/object/<id:int>')
def callback(id):
assert isinstance(id, int)
@route('/show/<name:re:[a-z]+>')
def callback(name):
assert name.isalpha()
@route('/static/<path:path>')
def callback(path):
return static_file(path, ...)
現在可以自定義你自己的過濾器了。