Este é o meu código:
@app.route('/hello', methods=["POST"])
def hello():
resp = make_response()
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
No entanto, quando faço uma solicitação do navegador para meu servidor, recebo este erro:
XMLHttpRequest cannot load http://localhost:5000/hello.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Também tentei essa abordagem, definindo os cabeçalhos de resposta "após" a solicitação:
@app.after_request
def add_header(response):
response.headers['Access-Control-Allow-Origin'] = '*'
return response
Sem dados. Recebo o mesmo erro. Existe uma maneira de apenas definir os cabeçalhos de resposta na função de rota? Algo assim seria o ideal:
@app.route('/hello', methods=["POST"])
def hello(response): # is this a thing??
response.headers['Access-Control-Allow-Origin'] = '*'
return response
mas não consigo encontrar uma maneira de fazer isso. Por favor ajude.
EDITAR
se eu enrolar o url com uma solicitação POST assim:
curl -iX POST http://localhost:5000/hello
Eu recebo esta resposta:
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>
Alguma ideia?
Este trabalho para mim
fonte
return Response(headers={'Access-Control-Allow-Origin':'*'})
que me parece mais limpa.Foi assim que adicionei meus cabeçalhos em meu aplicativo de frasco e funcionou perfeitamente
fonte
Podemos definir os cabeçalhos de resposta no aplicativo Python Flask usando o contexto do aplicativo Flask usando
flask.g
Esta maneira de definir cabeçalhos de resposta no contexto do aplicativo Flask
flask.g
é thread-safe e pode ser usada para definir atributos personalizados e dinâmicos de qualquer arquivo do aplicativo. Isso é especialmente útil se estivermos definindo cabeçalhos de resposta personalizados / dinâmicos de qualquer classe auxiliar, que pode também pode ser acessado de qualquer outro arquivo (digamos, middleware, etc), issoflask.g
é global e válido apenas para esse segmento de solicitação.Diga se eu quero ler o cabeçalho de resposta de outra chamada api / http que está sendo chamada a partir deste aplicativo e, em seguida, extrair e definir como cabeçalhos de resposta para este aplicativo.
Código de amostra: arquivo:
helper.py
Arquivo:
middleware.py
Chamando o middleware da classe principal
Arquivo :
main.py
fonte