作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我四处阅读并找到了 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/
我是一名优秀的程序员,十分优秀!