【问题标题】:Pass JSON response from requests call to Flask response将请求调用的 JSON 响应传递给 Flask 响应
【发布时间】:2015-09-08 15:46:45
【问题描述】:

我有一个向外部 url 发出请求并返回解码的 JSON 响应的函数。我想添加一个 Flask 视图来进行此调用并在我的应用程序中返回 JSON 响应。该函数在 IPython 笔记本中有效,但在 Flask 中无效,我得到TypeError: 'dict' object is not callable。如何通过 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

【问题讨论】:

    标签: python json flask python-requests


    【解决方案1】:

    您没有返回有效的响应。 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多