Este es mi codigo:
@app.route('/hello', methods=["POST"])
def hello():
resp = make_response()
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
Sin embargo, cuando hago una solicitud desde el navegador a mi servidor, aparece este error:
XMLHttpRequest cannot load http://localhost:5000/hello.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
También probé este enfoque, estableciendo los encabezados de respuesta "después" de la solicitud:
@app.after_request
def add_header(response):
response.headers['Access-Control-Allow-Origin'] = '*'
return response
No dados. Me sale el mismo error. ¿Hay alguna forma de configurar los encabezados de respuesta en la función de ruta? Algo como esto sería ideal:
@app.route('/hello', methods=["POST"])
def hello(response): # is this a thing??
response.headers['Access-Control-Allow-Origin'] = '*'
return response
pero no puedo encontrar de todos modos para hacer esto. Por favor ayuda.
EDITAR
si rizo la URL con una solicitud POST como esta:
curl -iX POST http://localhost:5000/hello
Recibo esta respuesta:
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>
¿Algunas ideas?
Esto funciona para mi
fuente
return Response(headers={'Access-Control-Allow-Origin':'*'})
que me parece más limpia.Así fue como agregué mis encabezados en mi aplicación de matraz y funcionó perfectamente
fuente
Podemos configurar los encabezados de respuesta en la aplicación Python Flask usando el contexto de la aplicación Flask usando
flask.g
Esta forma de configurar los encabezados de respuesta en el contexto de la aplicación Flask
flask.g
es segura para subprocesos y se puede usar para configurar atributos personalizados y dinámicos desde cualquier archivo de aplicación, esto es especialmente útil si estamos configurando encabezados de respuesta personalizados / dinámicos de cualquier clase auxiliar, que puede también se puede acceder desde cualquier otro archivo (por ejemplo, middleware, etc.), estoflask.g
es global y válido solo para ese hilo de solicitud.Diga si quiero leer el encabezado de respuesta de otra llamada api / http que se está llamando desde esta aplicación, y luego extraiga cualquiera y configúrelo como encabezados de respuesta para esta aplicación.
Código de muestra: archivo:
helper.py
expediente:
middleware.py
Llamar al middleware desde la clase principal
expediente :
main.py
fuente