2012-12-01 13 views
6

Mam uruchomione API, używając Flask, Flask-SQLAlchemy i Flask-Restless, i próbuję wykonać żądania POST/PUT/DELETE z javascript (a dokładniej backbone.js). Jednak ciągle napotykam na błędy CORS - wszystko oprócz GET zwraca błąd HTTP OPTIONS 501 w przeglądarce.Błędy CORS z Flask i geventem

Początkowo próbowałem dodając najmniej restrykcyjna CORS nagłówki możliwe do wszystkich odpowiedzi:

@app.after_request 
def after(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    response.headers.add('Access-Control-Allow-Methods', 
         'POST, GET, PUT, PATCH, DELETE, OPTIONS') 
    response.headers.add('Access-Control-Allow-Headers', 
         'Content-Type, X-Requested-With') 
    response.headers.add('Access-Control-Max-Age', '1728000') 

    return response 

CORS wydawało się niepowodzeniem, gdy Content-Type nagłówek wniosek został ustawiony na application/json (zgodnie z wymaganiami API) , więc został szybko zrobiony, aby wszystko działało:

@app.before_request 
def before(): 
    request.environ['CONTENT_TYPE'] = 'application/json' 

Jednak wszystko oprócz POST nadal się nie udaje. Ponadto rejestrowanie gevent jest włączone, ale żadne żądania OPTIONS nie są nigdy rejestrowane (co, jak sądzę, jest materiałem inspekcyjnym CORS), nawet jeśli przeglądarka pokazuje, że zawodzą z 501.

Czy muszę zmienić coś w geventie lub Flask, żeby CORS działał?

Edit: Running API za pomocą wbudowanego serwera prac kolbie tak gevent jest problemem, ale nie wydaje się znaleźć dużo w drodze docs ...

Odpowiedz

0

Najprostszym sposobem jest użycie skrzynkowego Cors wtyczek

zainstalować przy użyciu pip

pip install -u skrzynkowego Cors

przykładowy kod

app = Flask(__name__) 
cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) 

@app.route("/api/v1/users") 
def list_users(): 
    return "user example" 

Do dokumentacji z głową tutaj flask-cors documentation.

Powiązane problemy