1.3.1 DYNAMIC ROUTES(動態路由)

有通配符的路由叫做動態路由(相對於靜態路由來說),動態路由可以匹配多個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, ...)

現在可以自定義你自己的過濾器了。

發佈了10 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章