gpt4 book ai didi

javascript - Flask 中的多个 POST 请求

转载 作者:行者123 更新时间:2023-11-28 18:49:57 25 4
gpt4 key购买 nike

我需要在用 Python + JS 制作的 WebApp 的单个页面上有多个 POST 请求

这是我的 App.py 代码:

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://myapiurl.com/myapi/'
payload = {
"perfid" : value1,
"section" : {
"hostname" : value2,
"iteration" : value3,
"sectionname" : "sysstat_M"
}
}


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

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

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


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

现在我需要在同一页面上进行多个此类 POST 请求 API 调用。我所说的多个 POST 请求是指我需要在同一页面内使用另外一个 API。

例如:我有另一个 API http://myapiurl.com/myapi2/我也需要使用相同的 POST 请求来使用它,因为只有一个参数不同,结果就会不同。

url = 'http://myapiurl.com/myapi2/'
payload = {
"perfid" : value1,
"section" : {
"hostname" : value2,
"iteration" : value3,
"sectionname" : "DIFFERENT VALUE"
}
}


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

这是我的 JS 代码:

$(document).ready(function() {
console.log("ready!");


$('form').on('submit', function() {

console.log("the form has beeen submitted");

// grab values
valueOne = $('input[name="perfid"]').val();
valueTwo = $('input[name="hostname"]').val();
valueThree = $('input[name="iteration"]').val();


console.log(valueOne)
console.log(valueTwo)
console.log(valueThree)



$.ajax({
type: "POST",
url: "/",
dataType:'json',
data : { 'first': valueOne,'second': valueTwo,'third': valueThree},
success: function(data) {


var x = parseInt(data.result.sectoutput.summarystats.Avg.AVG);




if(x>80)
{
var res = data.result.sectoutput.summarystats.Avg.AVG;
var p = '<p>CPU may be overloading.</p>';
$('#result').append(p);

}
else
{
var p = '<p>Normal Usage going on.</p>';
$('#result').append(p);
}


},
error: function(error) {
console.log(error)
}
});

});

});

任何人都可以帮我做到这一点吗?这可能吗?

或者谁能指出我在哪里可以理解如何处理多个 POST 请求?谢谢。

最佳答案

如果客户端必须执行两个调用,则可以从 jQuery 进行两个调用。它被称为 deferred.then()。看看这个链接https://api.jquery.com/deferred.then/http://api.jquery.com/jquery.post/

基本上,您将有两个ajax调用,而不是一个ajax调用,第一个调用将等待第二个调用完成,然后您可以在html中公开组合数据。您将调用第一个 API。成功后,您将调用第二个 API,最后您将合并两个请求的数据并将其显示在屏幕上。语法类似于:

var request = $.ajax( "http://myapiurl.com/myapi/", { dataType: "json" } ),

chained = request.then(function( data ) {
return $.ajax( "http://myapiurl.com/myapi2/", { data: { user: data.userId } } );
});

chained.done(function( data ) {
// data retrieved from url2 as provided by the first request
});

另一个更简洁的选择是使用 jQuery“post”延迟函数而不是 ajax,如下所示:

$.post( "http://myapiurl.com/myapi/", 
function( response1 ) {
$.post( "http://myapiurl.com/myapi2/",
function( response2 ) {
//combine your data here and display it
var result = []
result.append(response1)
result.append(response2)
$(".result").html(result);
}
);
}
);

如果您需要第一个 API 在将数据传递给客户端之前调用第二个 API,则另一种选择是在第一个 API 中通过请求调用第二个 API。像这样的东西:

@app.route("/")
def your_method_name():
#get the data from the current first API
data = {
"perfid" : value1,
"section" : {
"hostname" : value2,
"iteration" : value3,
"sectionname" : "FIRST VALUE"
}
}
#then call the second api
r = requests.post('http://myapiurl.com/myapi2/')
data2 = json.loads(r.text) #this should give you the second payload with the different value if the call to the second API is successful

#combine data and data2 in a lsit
list = []
list.append(data)
list.append(dat2)

#return the combined data
return jsonify(list)

关于javascript - Flask 中的多个 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34647671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com