小编典典

龙卷风宁静处理程序类

python

我已经阅读了一下,找到了一个与此相关的问题的答案,但我真正想知道的是如何实现此结构以及需要多少个处理程序类:

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] +的单个处理程序,并为该项目(item / new和/ items / [0-9] + /
edit)添加3个新处理程序。不利的一面是,对于单个资源有4个处理程序,这似乎是次佳的解决方案。

我对正确的路由/处理/ Web应用程序是非常陌生的,但是至少在开始学习某些东西之前,请先阅读一下。关于您路由处理程序的数量/方式,是否有更好的建议?


阅读 212

收藏
2021-01-20

共1个答案

小编典典

好吧,这在很大程度上是风格上的。在这种情况下,每个请求处理程序都代表从一个方法中删除一个if语句。我认为限制RequestHandlers的数量可能更清楚。我认为使用一个处理程序和三个路由可以实现最清晰的结果。

我还丢弃了您的项目3。因为它是项目6的重复项。如果真的有一个“ items / new”
URL非常重要,那么我们可以放回去。尽管我认为此时您需要另一个处理程序为清楚起见而上课。

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’网址,那么我可能建议将其放在单独的处理程序中,因为否则会使逻辑过于复杂。

2021-01-20