繁体   English   中英

在Flask中发出两个HTTP POST请求

[英]Making two HTTP POST Requests in Flask

我需要执行以下两个代码中所示的两个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都起作用,有人可以建议???

在此处输入图片说明

两种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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM