如何正确使用flask请求从JSON检索数据?

时间:2017-05-18 12:10:03

标签: python json request

我看了许多与我的头衔相似的问题,但我还没有发现任何与我有同样问题的问题。

我做了requests.post将JSON发布到API restful server。以下是摘录

import requests

def upload_data():
    url = "http://127.0.0.1:8088/"
    data = {"value":"abc123"}
    response = requests.post(url, data=data)

    print response.status_code, response.reason, response.text

upload_data()

对于服务器端

from flask_restful import Api, Resource
from flask import request

class MyAPI(Resource):
    def get():
        pass

    def post(self):
        value = request.data['value']
        response_object = {
            'value':value
        }

        return response_object, 201

我希望通过使用

显示201 Created的结果来使POST功能正常工作
{
    'value':'abc123'
}

但是每当我运行脚本时,它都会给我错误的说法

    value = request.data["value"]
TypeError: string indices must be integers, not str

如果这是一个糟糕的问题,我很抱歉,但是如果有人能告诉我这个剧本中缺少的东西,我真的很感激。谢谢。

2 个答案:

答案 0 :(得分:1)

request.datastring,而request.valuesMultiDict

您需要将代码更新为:

value = request.values.get('value')

而不是

 value = request.data['value']

根据doc

  

<强> ARGS
  具有查询字符串的已解析内容的MultiDict。 (问号后面的URL中的部分)。

     

<强>形式
  一个MultiDict,包含来自POST或PUT请求的已解析表单数据。请记住,文件上传不会在此处结束,而是在文件属性中结束。

     

<强>值
  一个CombinedMultiDict,包含form和args的内容。

     

数据
  包含传入的请求数据作为字符串,以防它带有Flask无法处理的mimetype。

答案 1 :(得分:1)

那是因为请求数据尚未解析为python字典。你是否想过

data = json.loads(request.data)

但请注意,您实际上并未向烧瓶服务器发布JSON正文。您正在发布多部分formdata。所以你可能正在寻找luoluo发布的答案。

另一方面,如果你真的想要处理json,发送 json的正确方法看起来像这样:

requests.post(url, json=data)

然后按照建议加载。