gpt4 book ai didi

python - Tornado URL 查询参数

转载 作者:IT老高 更新时间:2023-10-28 21:46:23 26 4
gpt4 key购买 nike

我一直在玩 Tornado,我写了一些看起来不太好的代码。

我正在编写一个应用程序来存储食谱作为示例。这些是我的处理程序:

handlers = [
(r"/recipes/", RecipeHandler),
(r"/recipes", RecipeSearchHandler), #so query params can be used to search
]

这导致我写这个:

class RecipeHandler(RequestHandler):      
def get(self):
self.render('recipes/index.html')

class RecipeSearchHandler(RequestHandler):
def get(self):
try:
name = self.get_argument('name', True)
self.write(name)
# will do some searching
except AssertionError:
self.write("no params")
# will probably redirect to /recipes/

有没有更好的方法来处理这些 URL 而无需尝试/异常(exception)?我希望/recipes 和/recipes/显示相同的内容,而/recipes?name=something 会进行搜索,最好是不同的处理程序。

最佳答案

对于 GET 请求有更好的方法。 github上的tornado源码中有一个demo here

# url handler
handlers = [(r"/entry/([^/]+)", EntryHandler),]

class EntryHandler(BaseHandler):
def get(self, slug):
entry = self.db.get("SELECT * FROM entries WHERE slug = %s", slug)
if not entry: raise tornado.web.HTTPError(404)
self.render("entry.html", entry=entry)

任何匹配正则表达式的“文本”都将作为 slug 参数传递给 EntryHandler 的 get 方法。如果 url 不匹配任何处理程序,用户将收到 404 错误。

如果你想提供另一个回退,你可以使参数可选

(r"/entry/([^/]*)", EntryHandler),

class EntryHandler(BaseHandler):
def get(self, slug=None):
pass

更新:

+1 for the link. However does this URL pattern extend to include more parameters if I wanted to search like this... /recipes?ingredient=chicken&style=indian – colinjameswebb

是的。

handlers = [
(r'/(\d{4})/(\d{2})/(\d{2})/([a-zA-Z\-0-9\.:,_]+)/?', DetailHandler)
]

class DetailHandler(BaseHandler):
def get(self, year, month, day, slug):
pass

关于python - Tornado URL 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com