在tornado做出網址即為資料的id的handler

這個需求只用一句話講滿抽象的, 以觀看還有編輯 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'),

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *