使用烧瓶托管图像,然后使用相同代码中的另一个视图函数处理该图像

时间:2017-07-06 13:28:04

标签: python web-services flask

所以我使用flask托管图像,然后我想使用相同代码中的url对API发布请求:

@app.route('/host')
def host():
    return send_from_directory("C:/images", "image1.png")

@app.route('/post')
def post():
    response = requests.post(url, data={'input':'<url for host>', headers=headers)
    return jsonify(response.json())

我相信这两个视图函数都在同一个python文件中,post()被阻止。 这个问题有解决方法吗?

PS:如果我在不同的机器上托管图像,它可以工作,但这不是我想要的。 谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您的代码存在一些问题。

首先,我不相信Flask中有一个@app.post()装饰器。我的猜测是你试图指定该路由应由用户发布。这样做的方法是@app.route('/post', methods=['POST'])

接下来,当用户向此端点发送HTTP请求时,您似乎希望/post端点向用户指定的(?)URL发送POST请求。对于用户指定的/用户POST的URL,你会这样做(我没有运行这段代码来测试它):

@app.route('/send_post_request', methods=['POST'])
def send_post_request():
    user_posted_data = json.loads(request.data)
    user_specified_url = user_posted_data['url']
    dict_to_post= { 'input': url_for('hosts') }
    headers = {}  # Fill these in
    response = requests.post(user_specified_url , json=dict_to_post, headers=headers)
    return jsonify(response.json())

如果服务器知道发送POST请求的URL,您可以让用户只发送一个GET请求:

@app.route('/send_post_request', methods=['GET'])
def send_post_request():
    dict_to_post = { 'input': url_for('hosts') }
    headers = {}  # Fill these in
    server_specified_url = ''  # Fill this in
    response = requests.post(server_specified_url, json=dict_to_post, headers=headers)
    return jsonify(response.json())