2016-12-20 3 views
-1

Wieder zurück hier mit einer Flaschenfrage. Ich bin ein Anfänger und lerne einige tolle Dinge von reddit (wie legit code). Hier ist mein Code, dass ich bestimmte Informationen von einer API erfasst habe, die ich nun lokal über Flask hosten möchte.Interner Serverfehler von 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() 

Als ich 127.0.0.1:5000 laufen erhalte ich:

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. 

Hier ist, was mein Server sagt mir!

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 - 

Ich sollte erwähnen, dass dieser Code außerhalb des Flaschenrahmens funktioniert!

+1

ich mit Kolben nicht vertraut bin (aber Django statt) . Meine Vermutung ist, Sie versuchen, dict Typ Objekt 'Antwort' zurück zu senden. Aber Sie müssen HTTP Response senden. Sie können googeln auf * how to send dict als Antwort auf Flask API *, die mir das Ergebnis gab: [Wie man Json mit Flask Web-Framework zurückgeben] (http://stackoverflow.com/a/13089975/2063361) –

Antwort

1

Sie müssen eine gültige HTTP Antwort zurückgeben. Um dies zu tun, können Sie jsonify wie unten verwenden:

return jsonify(response) 

Nicht vergessen jsonify wie diese zu importieren:

from flask import jsonify 

jsonify() gibt ein flask.Response() Objekt.

Sie können auch json.dumps() verwenden, aber in diesem Fall benötigen Sie einen http Statuscode und eine Content-Type Header hinzufügen eine gültige HTTP Antwort zurück:

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