gpt4 book ai didi

python - Tornado Restful 处理程序类

转载 作者:太空狗 更新时间:2023-10-29 17:59:48 26 4
gpt4 key购买 nike

我四处阅读并找到了 this answered question关于与此相关的问题,但我真正想知道的是如何实现此结构以及我需要多少个处理程序类:

1  GET    /items        #=> index
2 GET /items/1 #=> show
3 GET /items/new #=> new
4 GET /items/1/edit #=> edit
5 PUT /items/1 #=> update
6 POST /items #=> create
7 DELETE /items/1 #=> destroy

我在考虑将 2、5、7 映射到路由到/items/[0-9]+ 的单个处理程序,并为项目、items/new 和/items/[0-9]+ 添加 3 个新处理程序/编辑。不利之处在于,为单个资源设置 4 个处理程序感觉像是一个次优解决方案。

我对正确的路由/处理/webapps 非常陌生,但我至少在开始做某事之前好好阅读它。对于处理程序的数量/方式,是否有更好的建议?

最佳答案

嗯,这在很大程度上是风格化的。这种情况下的每个请求处理程序表示从您的方法之一中删除 if 语句。我认为它可以更清楚地限制RequestHandlers的数量。最清晰结果我认为可以通过一个处理程序和三个路由来实现。

我也扔掉了你的第 3 项。因为它是第 6 项的重复项。如果拥有“项目/新”网址非常重要,然后我们可以将其放回原处。尽管我认为此时您需要另一个处理程序类才能清楚起见。

class ItemHandler(tornado.web.RequestHandler):

def get(self, item_id=None, edit=False):
if item_id:
# get item from db
if edit:
new_data_from_query_string = self.get_argument('item_data')
# do edit, save item
# return item
else:
# return index

def put(self, item_id):
data = self.get_argument('item_data')
# do your update for item

def post(self):
data = self.get_argument('item_data')
# do your item creation

def delete(self, item_id):
# do your deletion for item_id

然后可以像这样创建实际的应用程序:

tornado.web.application([
(r'/items$', ItemHandler),
(r'/items/(\d+$)', ItemHandler),
(r'/items/(\d+)/(edit)$', ItemHandler),
])

如果你想要 '/items/new' url 那么我可能会建议把它放在一个单独的处理程序,否则会使逻辑过于复杂。

关于python - Tornado Restful 处理程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176185/

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