1.3.1 DYNAMIC ROUTES(动态路由)

来源:互联网 发布:mac pro有什么用 编辑:程序博客网 时间:2024/05/13 00:49

有通配符的路由叫做动态路由(相对于静态路由来说),动态路由可以匹配多个URL。一个简单的通配符由一对尖括号和里面的名字组成(比如 <name>),通配符由'/'分隔。例如,/hello/<name> 这个路由接收 /hello/alice 也接收 /hello/bob,但是不匹配 /hello,/hello/ 或是 /hello/mr/smith。

URL总每个通配符位置的值会当做参数传入相应回调函数。你能直接用这种方式实现RESTful,好看的和有意义的URL。这是另一些例子:

@route('/wiki/<pagename>')            # matches /wiki/Learning_Pythondef show_wiki_page(pagename):    ...@route('/<action>/<user>')            # matches /follow/defnulldef 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, ...)

现在可以自定义你自己的过滤器了。

0 0