Python request.json未检索到Flask POST

Python request.json未检索到Flask POST,python,json,post,flask,Python,Json,Post,Flask,我想使用Flask创建一个RESTAPI。 作为一个“框架”,我发现这似乎非常适合使用Flask创建REST-API,而且似乎也很容易 我有这个功能: @app.route('/api/users', methods=['POST']) def new_user(): username = request.json.get('username') password = request.json.get('password') 但是,当我尝试使用SOAPUI或HTTPReques

我想使用Flask创建一个RESTAPI。 作为一个“框架”,我发现这似乎非常适合使用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'
}
'{"username" : "John", "password" : "1234"}'
我检查了在这两个TOL中,它都是作为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)
但我想使用烧瓶中的标准函数


提前感谢您…

首先检查您的客户端发送的HTML标题(JS或其他任何内容)<代码>内容类型应为
application/json
。并使用
request.get_json()


UPD:您还可以尝试使用
request.get\u json(force=True,silent=True)
。这个方法的flask代码非常简单,你可以通过设置断点或写日志来调试它,以便更好地理解发生了什么。

所以这就是现在真正对我有效的方法:

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'
}
'{"username" : "John", "password" : "1234"}'

Python不关心字典的使用方式,但JSON会…

为什么不使用
JSON
库?
my_dict\u data=JSON.loads(request.data)
您可能想在REST客户机中尝试使用“而不是”。我记得邮递员不接受“for application/json”。