收集和物品处理程序为sep时,在龙卷风中建造201具尸体

2024-09-30 20:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的Tornado RESTful API中,我在/{prefix}/items/处有一个CollectionHandler和一个post()来创建一个新的item,它将放在/items/{id}下。当我返回201状态代码时,我希望包含/items/{id}的主体,它由ItemHandler的{}构造,同时不重复其逻辑。这就产生了一种具有许多参数的静态方法:

class CollectionHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.service = Service()

    def post(self, prefix):
        do_stuff(prefix)
        item, item_url = create_item()
        self.set_status(201)
        self.set_header('Location', item_url)
        self.write(ItemHandler.do_get(self.service, item_url, item.id))

class ItemHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.service = Service()

    @staticmethod
    def do_get(service, item_url, item_id):
        item = service.get_item(item_id)
        if not item: raise tornado.web.HTTPError(404)
        response = construct_response(item_url, item)
        return response

    def get(self, item_id):
        item_url = get_url(self.request)
        self.write(ItemHandler.do_get(self.service, item_url, item_id))

我该怎么清理这个?我正考虑在内部为新创建的/items/{id}执行一个HTTP请求并包括响应,但是肯定有更好的方法-它甚至可能因为阻塞而无法工作。。。在


Tags: selfwebidurlgetprefixresponsedef
1条回答
网友
1楼 · 发布于 2024-09-30 20:21:37

首先,我建议您在CollectionHandler post()中考虑重定向

self.redirect('/items/' + str(item.id))

不过,我猜你是附属于你的201状态码,所以重定向不会为你工作。在

你试过像这样使用mixin吗?公司名称:

^{pr2}$

相关问题 更多 >