在Flask中获取数据JSON

Bru*_*X92 2 python json curl cmd flask

即使遵循此处和此处的许多示例,我也无法在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)
Run Code Online (Sandbox Code Playgroud)

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

curl.exe -i -H“内容类型:应用程序/ json” -X POST -d'{“ title”:“ titi”}' http:// localhost:5000 / api / v1 / lists

curl.exe -i -H“内容类型:application / json” -X POST -d“ {”“”标题“”“:”“读一本书”“”}“ http:// localhost:5000 / api / v1 /列表

我总是有400错误的回报:

HTTP / 1.0 400错误请求内容类型:text / html内容长度:192服务器:Werkzeug / 0.12.1 Python / 3.6.0日期:Tue,04 Apr 2017 21:55:29 GMT 400错误的请求错误的请求浏览器(或代理)发送了该服务器无法理解的请求。

我看不到错误在哪里。

谢谢你的帮助。

小智 6

即使使用“工作”代码,如果您在if块中失败(when value1value2is None),也会导致相同的错误,因为您没有处理elseif块的一部分。更正应为:

@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)
Run Code Online (Sandbox Code Playgroud)

当然,您可能想要比None响应更好的东西。


All*_*ter 1

您的add_entry函数没有返回响应。你必须归还一些东西,即使它只是return 'OK'

编辑:你仍然没有返回任何东西。FlaskPython中的print语句并不等同于 PHP 中的echo. 所有print要做的就是打印到控制台。您仍然需要返回一个值。如果您需要的是返回contentappname进行 JSON 编码,则添加

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

到你的函数结束。

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