Python JSON请求为“无”

Python JSON请求为“无”,python,json,flask,Python,Json,Flask,我正在开发我的第一个Flask应用程序(版本0.10.1),也是我的第一个Python应用程序(版本3.5)。其中一个部件需要这样工作: @app.route('/transaction_result/', methods=['POST']) def transaction_result(): result = request.get_json() return result['flask_id'] 提交表格 运行芹菜任务(进行一些第三方API调用) 芹菜任务的API调用完成后

我正在开发我的第一个Flask应用程序(版本0.10.1),也是我的第一个Python应用程序(版本3.5)。其中一个部件需要这样工作:

@app.route('/transaction_result/', methods=['POST'])
def transaction_result():
    result = request.get_json()
    return result['flask_id']
  • 提交表格
  • 运行芹菜任务(进行一些第三方API调用)
  • 芹菜任务的API调用完成后,向应用程序中的另一个URL发送JSON帖子
  • 获取JSON数据并用它更新数据库记录
  • 以下是芹菜任务的相关部分:

    if not response['errors']: # response comes from the Salesforce API call
        # do something to notify that the task was finished successfully
        message = {'flask_id' : flask_id, 'sf_id' : response['id']}
        message = json.dumps(message)
        print('call endpoint now and update it')
        res = requests.post('http://0.0.0.0:5000/transaction_result/', json=message)
    
    这是它调用的端点:

    @app.route('/transaction_result/', methods=['POST'])
    def transaction_result():
        result = jsonify(request.get_json(force=True))
        print(result.flask_id)
        return result.flask_id
    
    到目前为止,我只是尝试获取数据并打印ID,之后我会担心数据库

    我遇到的错误是:
    requests.exceptions.ConnectionError:None:url:/transaction\u result/(由None引起的)

    我的读数表明我的数据可能不是JSON,因此结果中的Force=True,但即使这样似乎也不起作用。我还尝试在CocoaRestClient中使用内容类型头application/json执行相同的请求,得到了相同的结果


    因为这两次尝试都失败了,所以我无法判断我的问题是在请求中还是在尝试解析响应中。

    首先
    请求。get_json(force=True)
    返回一个对象(或者如果
    silent=True
    ,则不返回任何对象)
    jsonify
    将对象转换为JSON字符串。你正在尝试访问str_val.flask_id。这是不可能的。但是,即使删除了冗余的
    jsonify
    调用,您也必须将
    result.flask\u id
    更改为
    result['flask\u id']

    因此,最终代码应该如下所示:

    @app.route('/transaction_result/', methods=['POST'])
    def transaction_result():
        result = request.get_json()
        return result['flask_id']
    
    当您使用REST客户端测试路由时,您是绝对正确的。通过减少涉及的部件,它极大地简化了测试过程。从flask应用程序向同一应用程序发送请求时,一个众所周知的问题是在development server下仅使用一个线程运行此应用程序。在这种情况下,请求将始终被内部请求阻止,因为当前线程正在处理最外层的请求,无法处理内部请求。但是,由于您是从芹菜任务发送请求,因此不太可能是您的场景


    UPD:最后一个原因是IP地址
    0.0.0.0
    。把它换成真的解决了问题。

    非常感谢。我不确定我以前是否尝试过此操作,但我仍然得到了
    requests.exceptions.ConnectionError:None:url:/transaction\u result/(由None引起)
    错误,即使芹菜任务能够正确打印JSON。@JonathanStegall,尝试将IP地址从0.0.0.0更改为127.0.0.1或更改您的真实地址(如果有)。使用REST客户端的结果是什么?在我尝试测试Heroku URL后,它似乎终于起作用了。可能我的本地版本有问题,因为它不适用于localhost或127.0.0.1。你想把它作为一个答案,让我接受吗?