嗯,这很大程度上是风格上的。这种情况下的每个请求处理程序
表示从您的方法之一中删除 if 语句。我认为它
可以更清晰的限制RequestHandler的数量。最清晰的
我认为可以通过一个处理程序和三个路线来实现结果。
我也扔掉了你的第 3 项。因为它是第 6 项的重复项。如果
拥有“items/new”网址非常重要,然后我们可以将其放回原处。
尽管我认为此时您需要另一个处理程序类来清楚起见。
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”网址,那么我可能建议将其放入
一个单独的处理程序,因为否则会使逻辑过于复杂。