我想使用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)
但我想使用烧瓶中的标准功能。
提前谢谢你......
答案 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确实......