odg*_*rim 11 python rest tornado handlers
我已经阅读并找到了有关此问题的回答问题,但我真正想知道的是如何实现此结构以及我需要多少个处理程序类:
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
Run Code Online (Sandbox Code Playgroud)
我在想2,5,7映射到一个处理程序路由到/ items/[0-9] +并且有3个新的处理程序用于items,items/new和/ items/[0-9] +/edit.缺点是它感觉像是一个次优解决方案,可以为单个资源提供4个处理程序.
我对正确的路由/处理/ webapps非常陌生,但在开始之前我至少给它一个很好的阅读.您有多少/如何路由您的处理程序?
ayc*_*dee 18
嗯,它主要是风格.在这种情况下,每个请求处理程序代表从您的一个方法中删除if语句.我认为限制RequestHandler的数量会更清楚.我认为可以通过一个处理程序和三个路由实现最清晰的结果.
我也扔掉了你的物品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
Run Code Online (Sandbox Code Playgroud)
然后可以像这样创建实际的应用程序:
tornado.web.application([
(r'/items$', ItemHandler),
(r'/items/(\d+$)', ItemHandler),
(r'/items/(\d+)/(edit)$', ItemHandler),
])
Run Code Online (Sandbox Code Playgroud)
如果你想要'/ items/new'网址,那么我可能会建议把它放在一个单独的处理程序中,否则会使逻辑变得过于复杂.
归档时间: |
|
查看次数: |
7526 次 |
最近记录: |