這個需求只用一句話講滿抽象的, 以觀看還有編輯 youtube 影片為例, 影片的 id 就在網址裡.
也可以參考看看 tornado 的 blog 範例, 他的 router 下法:
class Application(tornado.web.Application):
def __init__(self, db):
self.db = db
handlers = [
(r"/", HomeHandler),
(r"/archive", ArchiveHandler),
(r"/feed", FeedHandler),
(r"/entry/([^/]+)", EntryHandler),
(r"/compose", ComposeHandler),
(r"/auth/create", AuthCreateHandler),
(r"/auth/login", AuthLoginHandler),
(r"/auth/logout", AuthLogoutHandler),
]
在 EntryHandler 裡, 存取 slug 就可以拿到 url 裡的我們要的 id.
class EntryHandler(BaseHandler):
async def get(self, slug):
entry = await self.queryone("SELECT * FROM entries WHERE slug = %s", slug)
if not entry:
raise tornado.web.HTTPError(404)
self.render("entry.html", entry=entry)
如果確定是拿 /…/edit 的, 也可以設定成這樣子:
(r'/your-object/(.*)/edit', 'app.controller.ObjectEditorHandler'),