【问题标题】:Python Flask Restful APIPython Flask RESTful API
【发布时间】:2016-08-16 13:40:14
【问题描述】:

我的 Flask 代码的一部分:

@app.route('/api/post', methods=['POST']) 
def post():
    body = request.get_json()
    json_body = json.loads(body)
    new_id = mongo.db.Projects.insert(json_body)
    return str(new_id)

发布新数据库条目的脚本:

payload =  { 'ProjectName' : 'KdB Test Project' }
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
r = requests.post('http://localhost:5000/api/post', headers=headers, data=json.dumps(payload))

我不断收到 json 解码器 TypeError 问题,例如

TypeError: expected string or buffer
2016-08-16 15:19:31,388 - werkzeug - INFO - 127.0.0.1 - - [16/Aug/2016 15:19:31] "POST /api/post HTTP/1.1" 500 -

我已经尝试了几件事,包括。发布字符串。任何线索我发布字典的方式有什么问题? 问题似乎出在 body = request.get_json() 处。我不认为我正在收集任何数据...

【问题讨论】:

    标签: python json flask flask-restful


    【解决方案1】:

    你不需要loads请求消息来获取dict格式。存储在body 变量中的信息已经是字典形式。只需执行以下操作即可消除错误:

    @app.route('/api/post', methods=['POST']) 
    def post():
        body = request.get_json()
        # json_body = json.loads(body)
        new_id = mongo.db.Projects.insert( body )
        return str( new_id )
    

    【讨论】:

      【解决方案2】:

      http://flask.pocoo.org/docs/0.11/api/#flask.Request.get_json

      get_json 可能已经返回了一个字典,所以你不需要调用json.loads(body)(这是最有可能导致TypeError 的原因)。

      @app.route('/api/post', methods=['POST']) 
      def post():
          json_body = request.get_json()
          new_id = mongo.db.Projects.insert(json_body)
          return str(new_id)
      

      【讨论】:

      • 谢谢,朋友们。不幸的是,它并没有解决我的问题。我收到以下错误:
      • 仍然出现该错误:文件“c:\Python27\Lib\json_init_.py”,第 338 行,加载返回 _default_decoder.decode(s) 文件“c :\Python27\Lib\json\decoder.py", line 365, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError: expected string or buffer
      • 感谢您的帮助。问题解决了。重新启动系统和/或将 @app.route 更改为不同的路径会有所帮助。
      • @KeesdeBlois:请考虑接受对您有帮助的答案(答案分数下方的勾号)。
      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2015-03-17
      • 2015-12-19
      相关资源
      最近更新 更多