【问题标题】:Making two HTTP POST Requests in Flask在 Flask 中发出两个 HTTP POST 请求
【发布时间】:2016-04-11 13:42:52
【问题描述】:

我需要执行如下代码所示的两个 post 请求,但只有一个 POST 有效,下面是 python 代码:

import json
from flask import Flask, render_template, request, jsonify
import requests
app = Flask(__name__)


@app.route("/",methods=['GET','POST'])
def home():
    if request.method == 'POST':
        #user inputs
        value1 = request.form.get('first')
        value2 = request.form.get('second')
        value3 = request.form.get('third')




        #api call 
        url = 'http://apihere/myapi'
        payload = {
                    "perfid" : value1,
                    "section" : {
                        "hostname" : value2,
                        "iteration" : value3,
                        "sectionname" : "sysstat_M"
                        }
                }
        payload1 = {
                    "perfid" : value1,
                    "section" : {
                        "hostname" : value2,
                        "iteration" : value3,
                        "sectionname" : "sysstat_x_1sec"
                        }
                }

        r = requests.post(url, data=json.dumps(payload))
        returnData = {}
        r1 = requests.post(url, data=json.dumps(payload1))
        returnData1 = {}


        if r.status_code == 200:
            returnData["status"] = "SUCCESS"
            returnData["result"] = json.loads(r.text)
            return jsonify(returnData)
        else:
            returnData["status"] = "ERROR"
            return jsonify(returnData)

        if r1.status_code == 200:
            returnData1["status"] = "SUCCESS"
            returnData1["result"] = json.loads(r1.text)
            return jsonify(returnData1)
        else:
            returnData1["status"] = "ERROR"
            return jsonify(returnData1)

        #print(r.status_code, r.headers['content-type'])
        #print(r.text)

    return render_template('index.html')



@app.route("/filer",methods=['GET','POST'])
def filer():
    if request.method == 'POST':
        #user inputs
        value = request.form.get('first')
        #api call 
        url = 'http://myanother/api'.format(value)
        response = requests.get(url)
        returnData = {}
        if response.status_code == 200:
            returnData["status"] = "SUCCESS"
            returnData["result"] = json.loads(response.text)
            return jsonify(returnData)
        else:
            returnData["status"] = "ERROR"
            return jsonify(returnData)
        #jsonify(response.json())
    return render_template('filer.html')


if __name__ == '__main__':
    app.run(debug=True)

如下截图显示只有一个 POST 工作。我怎样才能让两个 HTTP POST 工作,有人可以建议吗???

【问题讨论】:

  • 您的屏幕截图并没有真正显示只有 1 个 POST 请求正在工作;你怎么称呼第二个请求?这个的代码或网络信息在哪里?

标签: javascript python flask


【解决方案1】:

两个 POST 可能都在工作,但您在检查第一个后返回。

if r.status_code == 200:
    returnData["status"] = "SUCCESS"
    returnData["result"] = json.loads(r.text)
    return jsonify(returnData)  # HERE
else:
    returnData["status"] = "ERROR"
    return jsonify(returnData)  # OR HERE

if r1.status_code == 200:
    returnData1["status"] = "SUCCESS"
    returnData1["result"] = json.loads(r1.text)
    return jsonify(returnData1)  # You'd do it again here...
else:
    returnData1["status"] = "ERROR"
    return jsonify(returnData1)  # ... or here

相反,您需要收集两个结果并将它们一起返回。

if r.status_code == 200:
    returnData["status"] = "SUCCESS"
    returnData["result"] = json.loads(r.text)
else:
    returnData["status"] = "ERROR"

if r1.status_code == 200:
    returnData1["status"] = "SUCCESS"
    returnData1["result"] = json.loads(r1.text)
else:
    returnData1["status"] = "ERROR"

return jsonify(returnData=returnData, returnData1=returnData1)

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 2017-11-28
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多