Flask/Python请求,进行POST调用,等待响应,并使用GET调用获取POST记录

2024-04-19 21:24:40 发布

您现在位置:Python中文网/ 问答频道 /正文

当我打开表单时,我的应用程序生成一个UUID,在提交时,它对我的api进行POST调用,传递此值,从而在我的应用程序中创建一个具有附加属性的事件。然后,我想调用传递UUID值的events API,这样我的API将返回一个响应,在那里我将能够看到更多属性

我收到一个202状态码,但是在我的GET呼叫的响应中,我没有看到记录。我的猜测是我没有等待响应,但我的印象是python请求将等待,然后执行其余代码

我可以使用邮递员传递与GET调用中相同的值进行调用,然后收到响应

如何确保我的应用程序已等待足够的时间?我已经尝试了sleep(5),这应该是足够的时间,但它显示0条记录

import requests, uuid, json, pymysql, datetime, time
from datetime import datetime
from random import randint
from time import strftime, sleep
from flask import Flask, render_template, flash, request, redirect, url_for, jsonify
from wtforms import Form, TextField, TextAreaField, validators, \
    StringField, SubmitField

DEBUG = True
app = Flask(__name__)
app.config.from_object(__name__)
app.config['SECRET_KEY'] = 'xxxxxxxxxxxxxxxxx'


class ReusableForm(Form):

###

@app.route('/alert', methods=['GET', 'POST'])
def alert():
    form = ReusableForm(request.form)
    incident = uuid.uuid4()
    time = strftime('%Y-%m-%d %H:%M')

   if request.method == 'POST':
        impact = request.form['impact']     

        if form.validate():
            write_to_disk(impact)
            flash('{} {}'.format(impact))      
            
            url = "https://api/v1/"

            payload="{\"incident\":\"" + str(incident) + "\", \"Impact\":\"" + str(impact) + "\"}"
            headers = {
                        'Content-Type': 'application/json'
            }

            response = requests.request("POST", url, headers=headers, data=payload)
                    
            if response.status_code == 202:         
            
                sleep(3)
                inc_id = str(incident)
                print ("This is the second call")
                print (inc_id)
            
                url = "https://api/v1/events/" + inc_id + ",&embed=properties"
                
                print (url)

                payload={}
                headers = {
                            'Authorization': 'Basic xxxxxxxxxxxxxxxxxxxxxxxxxx='
                }

                response = requests.request("GET", url, headers=headers, data=payload)
            
                response_dump = json.dumps(response.text, sort_keys = True, indent = 4, separators = (',', ': '))

                print (response_dump)
                   
        return redirect(url_for('updated'))

Tags: fromimportformapp应用程序urlgetresponse
1条回答
网友
1楼 · 发布于 2024-04-19 21:24:40

没有足够的声誉来写评论。能否在api中为GET端点添加代码?因为我看到还有一些get参数(顺便说一下,,&embed=properties应该更改为?embed=properties

还有一个建议: 如果使用json关键字参数,则可以将payload作为dict传递。它将添加适当的头。因此,您的代码如下所示:

url = "https://api/v1/"

# usual dict now
payload={
         "incident" : str(incident), 
         "Impact": str(impact)
        }

response = requests.request("POST", url, json=payload)

另外:不需要向GET请求传递任何data=payload

相关问题 更多 >