将请求调用的 JSON 响应传递给 Flask 响应
Pass JSON response from requests call to Flask response
我有一个函数可以向外部 url 发出请求,并 return 解码 JSON 响应。我想添加一个 Flask 视图来进行此调用,并在我的应用程序中添加 return JSON 响应。该函数在 IPython notebook 中有效,但在 Flask 中无效,我得到 TypeError: 'dict' object is not callable
。我如何 return 来自 Flask 请求的 JSON 响应?
def get_one_day(year, month, day):
url = 'http://api.wunderground.com/api/' + API_KEY + '/history_' + year + month + day +'/geolookup/q/Beijing/Beijing.json'
cnt = requests.get(url)
js = cnt.json()
return js
@app.route('/')
def download():
response = make_response(get_one_day('2014', '01', '01'))
return response
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/jm/Dev/weather/weather.py", line 40, in download
response = make_response(get_one_day('2014', '01', '01'))
File "/anaconda/lib/python2.7/site-packages/flask/helpers.py", line 183, in make_response
return current_app.make_response(args)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1577, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "/anaconda/lib/python2.7/site-packages/werkzeug/wrappers.py", line 841, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "/anaconda/lib/python2.7/site-packages/werkzeug/test.py", line 867, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'dict' object is not callable
您没有返回有效的回复。 Flask 需要一个字符串、元组或 Response
对象,但您直接返回 JSON 数据(字典)。与其解码 JSON,不如将其作为响应传递。
return app.response_class(cnt.content, mimetype='application/json')
或使用 jsonify
将字典转换为 JSON 响应。
from flask import jsonify
js = cnt.json()
return jsonify(js)
我有一个函数可以向外部 url 发出请求,并 return 解码 JSON 响应。我想添加一个 Flask 视图来进行此调用,并在我的应用程序中添加 return JSON 响应。该函数在 IPython notebook 中有效,但在 Flask 中无效,我得到 TypeError: 'dict' object is not callable
。我如何 return 来自 Flask 请求的 JSON 响应?
def get_one_day(year, month, day):
url = 'http://api.wunderground.com/api/' + API_KEY + '/history_' + year + month + day +'/geolookup/q/Beijing/Beijing.json'
cnt = requests.get(url)
js = cnt.json()
return js
@app.route('/')
def download():
response = make_response(get_one_day('2014', '01', '01'))
return response
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/jm/Dev/weather/weather.py", line 40, in download
response = make_response(get_one_day('2014', '01', '01'))
File "/anaconda/lib/python2.7/site-packages/flask/helpers.py", line 183, in make_response
return current_app.make_response(args)
File "/anaconda/lib/python2.7/site-packages/flask/app.py", line 1577, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "/anaconda/lib/python2.7/site-packages/werkzeug/wrappers.py", line 841, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "/anaconda/lib/python2.7/site-packages/werkzeug/test.py", line 867, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'dict' object is not callable
您没有返回有效的回复。 Flask 需要一个字符串、元组或 Response
对象,但您直接返回 JSON 数据(字典)。与其解码 JSON,不如将其作为响应传递。
return app.response_class(cnt.content, mimetype='application/json')
或使用 jsonify
将字典转换为 JSON 响应。
from flask import jsonify
js = cnt.json()
return jsonify(js)