Flask POST未由request.json检索

时间:2015-02-07 14:48:22

标签: python json post flask

我想使用Flask创建REST-Api。 作为一个“框架”,我发现这个Tutorial似乎非常适合使用Flask创建一个REST-API,它似乎也很容易......

我有这个功能:

@app.route('/api/users', methods=['POST'])
def new_user():
    username = request.json.get('username')
    password = request.json.get('password')

但是当我尝试使用SOAPUI或HTTPRequester(在Firefox中)发布数据时,我总是收到服务器错误500

我的应用程序/ json数据如下所示:

{
 'username' : 'John',
 'password' : '1234'
}

我在两个故事中检查过它是作为application / json发送的。

所以我在request.json:

之前插入了以下内容
if not request.json:
    abort(400)

现在它以代码400中止 - 所以它似乎不是一个json对象,对吧?

然后我插入了以下几行:

test = request
print test.data

然后我在控制台中检索它,看起来像JSON:

{
    'username' : 'John',
    'password' : '1234'

    }

我知道我可以用这个把它变成一个词典:

dict = ast.literal_eval(test.data)

但我想使用烧瓶中的标准功能。

提前谢谢你......

2 个答案:

答案 0 :(得分:0)

首先检查客户端发送的HTML标头(JS或其他任何内容)。 Content-Type应为application/json。并使用request.get_json()

UPD:您也可以尝试使用request.get_json(force=True, silent=True)。此方法的烧瓶代码非常简单,您可以调试它来放置断点或写入登录以更好地了解发生的情况。

答案 1 :(得分:-1)

所以这就是我真正有用的东西:

if request.headers['Content-Type'] == 'application/json':
    if not request.json:
        abort(400)
    jdata = json.loads(request.data)

    if not request.json:
        abort(400)

    username = jdata.get('username')
    password = jdata.get('password')

我还尝试使用cURL发布JSON - 始终确保出站字符串为',内部键为",如下所示:

'{"username" : "John", "password" : "1234"}'

Python不关心它们对字典的方式,但JSON确实......