2016-12-20 9 views
-1

フラスコの質問でここに戻ってください。私は初心者であり、レッドからいくつか素晴らしいことを学ぶ(コードを正当化する方法)。 ここでは、フラスコからローカルにホストしようとしているAPIから特定の情報を取得したコードを示します。Flaskの内部サーバーエラー

from flask import Flask, render_template 

import httplib 

import json 

app = Flask(__name__) 


@app.route('/') 

def index(): 

    connection = httplib.HTTPConnection('api.football-data.org') 

    headers = {'X-Auth-Token': 'this is my api token here', 'X-Response-Control': 'minified'} 
    connection.request('GET', '/v1/competitions/426/leagueTable', None, headers) 
    response = json.loads(connection.getresponse().read().decode()) 
    return response 


if __name__ == '__main__': 
    app.run() 

、私は127.0.0.1:5000を実行すると、私が手:

Internal Server Error 

The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application. 

ここでは、私のサーバーは、私に言っているものです!

MacBooks-MBP:Football macbookpro13$ python Footy_Web.py 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
[2016-12-20 13:58:17,493] ERROR in app: Exception on/[GET] 
Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1988, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1642, in full_dispatch_request 
    response = self.make_response(rv) 
    File "/Library/Python/2.7/site-packages/flask/app.py", line 1746, in make_response 
    rv = self.response_class.force_type(rv, request.environ) 
    File "/Library/Python/2.7/site-packages/werkzeug/wrappers.py", line 847, in force_type 
    response = BaseResponse(*_run_wsgi_app(response, environ)) 
    File "/Library/Python/2.7/site-packages/werkzeug/wrappers.py", line 57, in _run_wsgi_app 
    return _run_wsgi_app(*args) 
    File "/Library/Python/2.7/site-packages/werkzeug/test.py", line 871, in run_wsgi_app 
    app_rv = app(environ, start_response) 
TypeError: 'dict' object is not callable 
127.0.0.1 - - [20/Dec/2016 13:58:17] "GET/HTTP/1.1" 500 - 

このコードは、フラスコフレームワークの外で動作する必要があります。

+1

私は(代わりしかし、ジャンゴ)フラスコに精通していないです。私の推測では、あなたはdict型のオブジェクト '応答'を返そうとしています。しかし、HTTPレスポンスを送信する必要があります。あなたは私に結果を与えたFlask API *への応答としてdictを送る方法についてgoogleかもしれません:[FlaskのWebフレームワークを使ってjsonを返す方法](http://stackoverflow.com/a/13089975/2063361) –

答えて

1

有効なHTTP応答を返す必要があります。そのためには、以下のようなjsonifyを使用することができます。

return jsonify(response) 

はこのようjsonifyをインポートすることを忘れないでください:

from flask import jsonify 

jsonify()flask.Response()オブジェクトを返します。

ます。またjson.dumps()を使用することができますが、この場合には有効なHTTP応答を返すためにhttpステータスコードとContent-Typeヘッダを追加する必要があります。

return json.dumps(response), 200, {'content-type': 'application/json'}