Das ist mein Code:
@app.route('/hello', methods=["POST"])
def hello():
resp = make_response()
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
Wenn ich jedoch eine Anfrage vom Browser an meinen Server stelle, wird folgende Fehlermeldung angezeigt:
XMLHttpRequest cannot load http://localhost:5000/hello.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Ich habe auch diesen Ansatz ausprobiert und die Antwortheader "nach" der Anfrage gesetzt:
@app.after_request
def add_header(response):
response.headers['Access-Control-Allow-Origin'] = '*'
return response
Kein Würfel. Ich bekomme den gleichen Fehler. Gibt es eine Möglichkeit, nur die Antwortheader in der Routenfunktion festzulegen? So etwas wäre ideal:
@app.route('/hello', methods=["POST"])
def hello(response): # is this a thing??
response.headers['Access-Control-Allow-Origin'] = '*'
return response
aber ich kann es sowieso nicht finden. Bitte helfen Sie.
BEARBEITEN
Wenn ich die URL mit einer POST-Anfrage wie folgt kräusele:
curl -iX POST http://localhost:5000/hello
Ich bekomme diese Antwort:
HTTP/1.0 500 INTERNAL SERVER ERROR
Content-Type: text/html
Content-Length: 291
Server: Werkzeug/0.9.6 Python/2.7.6
Date: Tue, 16 Sep 2014 03:58:42 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>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.</p>
Irgendwelche Ideen?
Diese Arbeit für mich
quelle
return Response(headers={'Access-Control-Allow-Origin':'*'})
die für mich sauberer aussieht.So wurden meine Header in meine Kolbenanwendung eingefügt und es funktionierte perfekt
quelle
Wir können die Antwortheader in der Python Flask-Anwendung mithilfe des Flask-Anwendungskontexts mithilfe von festlegen
flask.g
Diese Methode zum Festlegen von Antwortheadern im Kontext der Flask-Anwendung
flask.g
ist threadsicher und kann zum Festlegen benutzerdefinierter und dynamischer Attribute aus einer beliebigen Anwendungsdatei verwendet werden. Dies ist besonders hilfreich, wenn Sie benutzerdefinierte / dynamische Antwortheader aus einer beliebigen Hilfsklasse festlegen Der Zugriff erfolgt auch über eine andere Datei (z. B. Middleware usw.). Diesflask.g
ist global und nur für diesen Anforderungsthread gültig.Sagen Sie, wenn ich den Antwortheader von einem anderen API / http-Aufruf lesen möchte, der von dieser App aufgerufen wird, und extrahieren Sie dann einen beliebigen & legen Sie ihn als Antwortheader für diese App fest.
Beispielcode: Datei:
helper.py
Datei:
middleware.py
Aufruf der Middleware aus der Hauptklasse
Datei :
main.py
quelle