routes是用python重新实现的Rails routes系统,用来映射url与应用程序的系统------路由寻找及url生成。
例子:
from routes import Mapper
map = Mapper()
map.connect(None, "/error/{action}/{id}", controller="error")
map.connect("home", "/", controller="main", action="index")
map.connect('/{controller}/{action}')
map.connect('/{controller}/{action}/{id}')
第1、2行:创建一个mapper。
第3行:匹配一个三分量的路由-以“/error”开始,定义controller为error。因此一个url“/error/images/arrow.jpg”将产生。
第4行:匹配一个单一的“/”url。定义controller and action分别为main、index。route的名字为home。
第5、6行:分别匹配任何两分量和三分量的url
假若不想为每一个action定义一个路由,可以采用第5、6行方式定义route。
定义一个正在匹配url(只能匹配/blog/123 不能匹配/blog/123A)
map.connect("/blog/{id}", requirements={"id": R"\d+"})
map.connect("/download/{platform}/{filename}", requirements={"platform": R"windows|mac"})
条件Conditions 路由:Conditions 字典可以最多具有三个key:method、sub_domain、function
m.connect("/user/list", controller="user", action="list", conditions=dict(method=["GET", "HEAD"]))
RESTful services
以下语句:
map.resource("message", "messages")
等同于:
map.connect("messages", "/messages",
controller="messages", action="create",
conditions=dict(method=["POST"]))
map.connect("messages", "/messages",
controller="messages", action="index",
conditions=dict(method=["GET"]))
map.connect("formatted_messages", "/messages.{format}",
controller="messages", action="index",
conditions=dict(method=["GET"]))
map.connect("new_message", "/messages/new",
controller="messages", action="new",
conditions=dict(method=["GET"]))
map.connect("formatted_new_message", "/messages/new.{format}",
controller="messages", action="new",
conditions=dict(method=["GET"]))
map.connect("/messages/{id}",
controller="messages", action="update",
conditions=dict(method=["PUT"]))
map.connect("/messages/{id}",
controller="messages", action="delete",
conditions=dict(method=["DELETE"]))
map.connect("edit_message", "/messages/{id}/edit",
controller="messages", action="edit",
conditions=dict(method=["GET"]))
map.connect("formatted_edit_message", "/messages/{id}.{format}/edit",
controller="messages", action="edit",
conditions=dict(method=["GET"]))
map.connect("message", "/messages/{id}",
controller="messages", action="show",
conditions=dict(method=["GET"]))
map.connect("formatted_message", "/messages/{id}.{format}",
controller="messages", action="show",
conditions=dict(method=["GET"]))
实现了以下RESTful接口功能:
GET /messages => messages.index() => url("messages")
POST /messages => messages.create() => url("messages")
GET /messages/new => messages.new() => url("new_message")
PUT /messages/1 => messages.update(id) => url("message", id=1)
DELETE /messages/1 => messages.delete(id) => url("message", id=1)
GET /messages/1 => messages.show(id) => url("message", id=1)
GET /messages/1/edit => messages.edit(id) => url("edit_message", id=1)