在Flask中创建两个HTTP POST请求 [英] Making two HTTP POST Requests in Flask

查看:877
本文介绍了在Flask中创建两个HTTP POST请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



 <$ c $ 

c>从jar文件导入json
烧瓶,render_template,request,jsonify
导入请求
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 $ b $ url url ='http:// apihere / myapi'
payload = {
perfid:value1,
section:{
hostname:value2,
iteration:value3,
sectionname:sysstat_M
}
}
payload1 = {
perfid:value1,
section:{
hostname:value2,
iteration:value3,
sectionname $ sys

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

$ b如果r.status_code == 200:
returnData [ status] =SUCCESS
returnData [result] = json.loads(r.text)
return jsonify(returnData)
else:
returnData [status ] =ERROR
return jsonify(returnData)
$ b $ if r1.status_code == 200:
returnData1 [status] =SUCCESS
returnData1 [结果] = json.loads(r1.text)
返回jsonify(returnData1)
else:
returnData1 [status] =ERROR
返回jsonify(返回数据1)

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

return render_template('index.html')



@ app.route(/ filer,methods = ['GET','POST'])
def filer():$ b $如果request.method =='POST':
#user输入
value = request.form.get('first')
#api call $ b $ url 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(respo nse.json())
返回render_template('filer.html')


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

如下图所示,只显示一个POST正在工作。如何使两个HTTP POST工作,可以有人建议???



解决方案

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

pre $ 如果r.status_code == 200:
returnData [status] =SUCCESS
returnData [result] = json.loads(r.text)
返回jsonify(返回数据)#这里
else:
returnData [status] =错误
return jsonify(returnData)#OR HERE

if r1.status_code == 200:
returnData1 [status] =SUCCESS
returnData1 [result] = json .loads(r1.text)
return jsonify(returnData1)#你会再次这样做...
else:
returnData1 [status] =错误
return jsonify(returnData1)#...或这里

相反,您需要收集结果和把它们归还。

pre $ 如果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)


I need to do two post request as shown in following code but only one POST is working,below is the python code :

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)

as below screenshot shows only one POST is working.How can I make both HTTP POST working ,can anyone suggest ???

解决方案

Both POSTs are probably working but you return after checking the first one.

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

Instead, you need to collect both results and return them together.

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)

这篇关于在Flask中创建两个HTTP POST请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆