【问题标题】:Get Data JSON in Flask在 Flask 中获取数据 JSON
【发布时间】:2017-08-30 07:31:54
【问题描述】:

即使在这里和那里遵循许多示例,我也无法在 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 错误请求 内容类型:文本/html 内容长度:192 服务器:Werkzeug/0.12.1 Python/3.6.0 日期:格林威治标准时间 2017 年 4 月 4 日星期二 21:55:29 400 错误请求 错误的请求 浏览器(或代理)发送了此服务器无法理解的请求。

我没有看到错误在哪里。

感谢您的帮助。

【问题讨论】:

标签: python json curl flask cmd


【解决方案1】:

您的 add_entry 函数没有返回响应。您必须返回 something,即使它只是 return 'OK'

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

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

到你的函数结束。

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

【讨论】:

  • Flask 不喜欢它。
  • 我忘记在初始帖子中添加打印。但是当我使用 curl 时仍然出现问题错误 400 并且打印在控制台中没有返回任何内容,只有“p0”是打印的。
【解决方案2】:

这里的代码适用于我的情况:

@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)

【讨论】:

    【解决方案3】:

    即使使用“工作”代码,如果您的 if 块失败(当 value1value2None 时)也会导致相同的错误,因为您没有处理 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 更好的东西作为响应。

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多