在Flask中获取Data JSON

时间:2017-04-04 21:59:23

标签: python json curl flask cmd

即便按照这里的许多例子和&在那里,我无法在POST方法中获得我的API工作。 这里有关于它的代码:

from flask import Flask, jsonify, request

@app.route('/api/v1/lists', methods=['POST'])
def add_entry():
    print("p0")
    content = request.get_json()
    appname = content.get('title')
    print(content)
    print(appname)

当我用curl查询时(我在Windows上运行它):

curl.exe -i -H“Content-Type:application / json”-X POST -d'{“title”:“titi”}'http://localhost:5000/api/v1/lists

curl.exe -i -H“Content-Type:application / json”-X POST -d“{”“”title“”“:”“”“读一本书”“”}“http://localhost:5000/api/v1/lists

我总是有400错误的回复:

HTTP / 1.0 400 BAD REQUEST 内容类型:text / html 内容长度:192 服务器:Werkzeug / 0.12.1 Python / 3.6.0 日期:2017年4月4日星期二21:55:29 GMT 400错误请求 错误的请求 浏览器(或代理)发送了此服务器无法理解的请求。

我没看到错误在哪里。

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

即使使用“工作”代码,如果if-block失败(value1value2None时)也会导致相同的错误,因为您没有处理if块的else部分。纠正的应该是:

@app.route('/api/v1/list', methods=['POST'])
def add_entry():
    print("p0")
    request_json     = request.get_json()
    value1           = request_json.get('First_Name')
    value2           = request_json.get('Last_Name')
    response_content = None

    if value1 is not None and value2 is not None:
        print("p3")
        cursor.execute("INSERT INTO person (first_name,last_name) VALUES (%s,%s)", (value1, value2))
        response_content = conn.commit()

    return jsonify(response_content)

当然,您可能需要比None更好的回复。

答案 1 :(得分:1)

您的add_entry函数未返回响应。您必须返回某些内容,即使它只是return 'OK'

编辑:你还没有回复任何东西。在Flask中,Python print语句不等同于PHP的echo。所有print都会打印到控制台。您仍然必须返回一个值。如果您需要返回contentappname JSON编码,请添加

return json.loads({'contents': contents, 'appname': appname})

到你的功能结束。

要清楚,在Flask视图中必须返回一个值。 Python函数隐式返回None是无关紧要的。发生的错误是您的函数没有返回语句。

答案 2 :(得分:0)

这是我的案例中的代码:

@app.route('/api/v1/list', methods=['POST'])
def add_entry():
    print("p0")
    request_json = request.get_json()
    value1 = request_json.get('First_Name')
    value2 = request_json.get('Last_Name')
    if value1 is not None and value2 is not None:
        print("p3")
        cursor.execute("INSERT INTO person (first_name,last_name) VALUES (%s,%s)", (value1, value2))
        data = conn.commit()
        return jsonify(data)