javascript python flask cors gevent

javascript - Errores CORS con Flask y gevent



python (2)

Hay un decodificador de fragmento de matraz para el control de acceso HTTP , puede usar el decorador @crossdomain (origin = ''*'').

Tengo una API ejecutándose, usando Flask, Flask-SQLAlchemy y Flask-Restless, y estoy tratando de realizar solicitudes POST / PUT / DELETE desde javascript (backbone.js, para ser precisos). Sin embargo, sigo encontrándome con errores CORS, todo, excepto GET, devuelve un HTTP OPTIONS 501 Error no implementado en el navegador.

Inicialmente, traté de agregar los encabezados CORS menos restrictivos posibles a todas las respuestas:

@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 pareció fallar cuando el encabezado Content-Type de la solicitud se estableció en application / json (como lo requiere la API), por lo que se realizó un corte rápido para que todo funcione:

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

Sin embargo, todo excepto POST aún falla. Además, el registro de gevent está activado, pero no se registran solicitudes OPTIONS (que creo que es el material de verificación previa de CORS), incluso cuando el navegador muestra que fallan con un 501.

¿Debo cambiar algo en gevent o Flask para que funcione CORS?

Editar: Funciona la API con el servidor de Flask incorporado, así que el problema es gevent, pero parece que no puedo encontrar mucho en el camino de los documentos ...


La forma más simple es usar el plugin de mazo-cors

Instalar usando pip

instalación de pip -U frasco-cors

Código de muestra

app = Flask(__name__) cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) @app.route("/api/v1/users") def list_users(): return "user example"

Para la documentación, diríjase aquí a la documentación del matraz .