【问题标题】:Passing url to flask api endpoint将url传递给flask api端点
【发布时间】:2015-02-03 03:42:28
【问题描述】:

我有一个很好用的烧瓶 api。最近,我们增加了一个文件上传部分。一些服务器端代码向 api 发送调用,这反过来会触发对这些上传文件的处理。 api 调用本身包括文件的绝对路径。所以我的路线定义如下:

@app.route('/Uploads/<string:userId>/<string:pathToFile>', methods=['POST'])

处理上传的代码是 PHP。在将路径发送到 api 之前,它通过一种方法发送,该方法避开斜杠,将它们变成 % 符号。对于熟悉它的人来说,该方法称为urlencode

我遇到的问题是烧瓶无法识别路线。请求会失败,即使它很简单:

localhost:5000/Uploads/testuser/%2Fhome

在上面的例子中,我相信% 字符会导致问题。如果我删除它,则请求成功。

我确实找到了以下似乎相关的 SO 帖子: How to pass file path in a REST API ala Dropbox using Flask-RESTful? 在其中,FP 建议使用 path 占位符而不是 string。我尝试在我的代码中这样做:

 @app.route('/Uploads/<string:userId>/<path:pathToFile>', methods=['POST'])

我给它传递了一条原始路径(没有通过 url 编码)。然而,这并没有奏效。

有人知道通过烧瓶 api 调用传递 url 或路径的正确方法吗?

【问题讨论】:

  • 为什么使用 <...>

标签: php python api rest flask


【解决方案1】:

您可能将正斜杠(/%2F)作为第一个字符传递。不要这样做,否则写的端点不会被 Flask 匹配。

您是否尝试过这样的准系统示例:

@app.route('/Uploads/<string:userId>/<path:pathToFile>')
def hello_world(userId, pathToFile):
    return '{uid} {path}'.format(uid=userId, path=pathToFile)

这确实会呈现预期的响应。

另外:检查您的函数参数以确保它们与 URL 参数一致。还要检查您的请求是 POST 而不是 GET,否则您将收到 Method Not Allowed 错误。

【讨论】:

  • 您是正确的,因为前导斜杠是问题所在。这似乎让我感到困惑,因为新结果看起来像是一个很长的 api 调用,但我想这就是 flask 的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2020-03-16
  • 2015-05-01
  • 2017-05-05
  • 2019-01-02
  • 1970-01-01
相关资源
最近更新 更多