将网址传递到烧瓶 API 端点


Passing url to flask api endpoint

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

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

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

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

localhost:5000/Uploads/testuser/%2Fhome

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

我确实找到了以下似乎相关的SO帖子:如何使用 Flask-RESTful 在 REST API ala Dropbox 中传递文件路径?在其中,FP建议使用path占位符而不是string。我尝试在我的代码中这样做,如下所示:

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

我向它传递了一个原始路径(没有通过 url 编码(。但是,这不起作用。

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

您可能

传递正斜杠(/%2F(作为第一个字符。不要这样做,否则写入的端点将无法与 Flask 匹配。

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

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

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

另外:检查函数参数,确保它们与网址参数一致。还要检查您的请求是否POST且未GET,否则您将收到"方法不允许"错误。