将url传递给flask api端点

时间:2014-12-05 02:49:52

标签: php python api rest flask

我有一个烧瓶api,效果很好。最近,我们添加了一个文件上传部分。一些服务器端代码向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呼叫传递网址或路径的正确方法?

1 个答案:

答案 0 :(得分: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,否则您将收到“不允许的方法”错误。