gpt4 book ai didi

python - 带有 web.py 的 Restful API

转载 作者:行者123 更新时间:2023-12-01 02:53:37 26 4
gpt4 key购买 nike

在 PHP Slim 中我可以这样做:

$app->get('/table/{table}', function (Request $request, Response $response, $args) {
$table = $args['table'];
$mapper = new TableMapper($this, $table);
$res = $mapper->getTable();
return $response->withJson($res);
}
$app->get('/table/{table}/{id}', function (Request $request, Response $response, $args) {
$table = $args['table'];
$id = (int)$args['id'];
$mapper = new TableMapper($this, $table);
$res = $mapper->getTableById($id);
return $response->withJson($res);
}

现在我正在尝试使用 web.py。我可以这样做:

urls = (
'/table/(.+)', 'table',
)
class table:
def GET( self, table ):
rows = db.select( table )
web.header('Content-Type', 'application/json')
return json.dumps( [dict(row) for row in rows], default=decimal_default )

但是如果我尝试通过这样做来扩展它,例如:

urls = (
'/table/(.+)', 'table',
'/table/(.+)/(\d+)', 'table_by_id'
)

处理永远不会到达第二个网址。相反,代码对表名“table/id”执行 db.select,这当然是错误的。

如何开发它来解析添加了 id 的 url?

最佳答案

web.py 与 urls 中列出的顺序匹配,因此切换顺序是解决问题的一种方法:

urls = (
'/table/(.+)/(\d+)', 'table_by_id',
'/table/(.+)', 'table'
)

另一条建议:收紧您的正则表达式,以便您更准确地匹配您要查找的内容。您会更快发现错误。

例如,您会注意到您的 /table/(.+) 确实会匹配 "/table/foo/1",因为正则表达式 .+ 也匹配 /,因此您可能会考虑像 ([^/]+) 这样的模式来匹配除斜杠之外的“所有内容”。

最后,您的网址中无需使用前导“^”或尾随“$”,web.py 始终 看起来与完整模式匹配。 (在内部,它添加了“^”和“$”)。

关于python - 带有 web.py 的 Restful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com