如何从 FLASK 中的 GET 请求中获取 Json 对象
How to get Json object from GETrequest in FLASK
我的服务器是 flask,我的客户端是 javascript,我正在使用 jquery - ajax 向服务器发送数据。我能够从 POST 请求中获取 JSON 对象,但无法通过 GET 获取。
来自 Javascript 客户的请求:
$.ajax({type: 'GET',
url: "/checkForTrain",
data: jsonObj,
success: function(response){
response = JSON.parse(response)
if(response['status']==='success')
postDataset(data)
else
handleError(data)
},
error : function(response){
console.log(response)
}
})
url 在 flask 中处理请求:
@app.route('/checkForTrain',methods=['GET','OPTIONS'])
def checkForTrain():
print request
json_str=u''+str(request.get_data())
print json_str,' <--- json data'
dataSearch = json.loads(json_str)
print dataSearch,' <--- dictionary'
obj = dbWrapper.checkForTrain(dataSearch['name'],dataSearch['type'])
return obj
打印请求的输出:
<Request 'http://localhost:5000/checkForTrain?{"name":"lel","technique":"regression"}' [GET]>
打印输出json_str,'<--- json数据'
<--- json data
服务器的堆栈跟踪:
Traceback (most recent call last):
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/app/routes.py", line 53, in checkForTrain
dataSearch = json.loads(json_str)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
您需要提取查询字符串;你可以使用 request.query_string
attribute to access it; you'll have to manually unquote 它:
From urllib import unquote
json_str = unquote(request.query_string)
然后你的视图输出:
<Request 'http://localhost:5000/checkForTrain?{"name":"lel","technique":"regression"}' [GET]>
{"name":"lel","technique":"regression"} <--- json data
{u'technique': u'regression', u'name': u'lel'} <--- dictionary
request.get_data()
method只能用于访问请求正文,而GET
请求永远不会有正文。
如果您的数据仅由键值对组成,那么坚持对这些键值对进行表单编码可能更容易,并坚持使用 Flask 的 request.args
功能,而不是在这里使用 JSON。
我的服务器是 flask,我的客户端是 javascript,我正在使用 jquery - ajax 向服务器发送数据。我能够从 POST 请求中获取 JSON 对象,但无法通过 GET 获取。
来自 Javascript 客户的请求:
$.ajax({type: 'GET',
url: "/checkForTrain",
data: jsonObj,
success: function(response){
response = JSON.parse(response)
if(response['status']==='success')
postDataset(data)
else
handleError(data)
},
error : function(response){
console.log(response)
}
})
url 在 flask 中处理请求:
@app.route('/checkForTrain',methods=['GET','OPTIONS'])
def checkForTrain():
print request
json_str=u''+str(request.get_data())
print json_str,' <--- json data'
dataSearch = json.loads(json_str)
print dataSearch,' <--- dictionary'
obj = dbWrapper.checkForTrain(dataSearch['name'],dataSearch['type'])
return obj
打印请求的输出:
<Request 'http://localhost:5000/checkForTrain?{"name":"lel","technique":"regression"}' [GET]>
打印输出json_str,'<--- json数据'
<--- json data
服务器的堆栈跟踪:
Traceback (most recent call last):
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/adminuser/Desktop/Github/DataMining/DataMiningProject/app/routes.py", line 53, in checkForTrain
dataSearch = json.loads(json_str)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
您需要提取查询字符串;你可以使用 request.query_string
attribute to access it; you'll have to manually unquote 它:
From urllib import unquote
json_str = unquote(request.query_string)
然后你的视图输出:
<Request 'http://localhost:5000/checkForTrain?{"name":"lel","technique":"regression"}' [GET]>
{"name":"lel","technique":"regression"} <--- json data
{u'technique': u'regression', u'name': u'lel'} <--- dictionary
request.get_data()
method只能用于访问请求正文,而GET
请求永远不会有正文。
如果您的数据仅由键值对组成,那么坚持对这些键值对进行表单编码可能更容易,并坚持使用 Flask 的 request.args
功能,而不是在这里使用 JSON。