python - abort method in Flask-Restful ignoring CORS options -
i have flask-restful api configured cors options:
api = api() api.decorators=[cors.crossdomain(origin='*', headers=['accept', 'content-type'])] ... api.init_app(app)
my api accepts post
requests may fail if data in request invalid:
class myapi(resource): def post(self): args = request.get_json() if args.get('something'): return {'message': 'request worked, data received!', 'something': args['something']} else: abort(500, "error: data must contain 'something' field!")
when make successful post
request api can see cors options set:
... * upload sent off: 81 out of 81 bytes * http 1.0, assume close after body < http/1.0 200 ok < content-type: application/json < content-length: 205 < access-control-allow-origin: * < access-control-allow-methods: head, get, post, options < access-control-max-age: 21600 < access-control-allow-headers: accept, content-type < server: werkzeug/0.9.4 python/2.7.6
if, however, post call in class exits through abort method (by purposely sending bad data request) access-control-*
fields missing response:
* upload sent off: 75 out of 75 bytes * http 1.0, assume close after body < http/1.0 500 internal server error < content-type: application/json < content-length: 51 < server: werkzeug/0.9.4 python/2.7.6
is possible make abort
method play nice cors rules, or should create own full-fledged response , avoid using abort function?
when trigger abort, error handler registered http error code automatically invoked, , response not served view function.
if use cors middleware provided flask-cors, instead of decorator form, in case of handled exceptions , aborts, cors headers injected expected.
if unhandled exception occurs, (e.g. there error in code, , 500 internal server error), flask bypasses middleware, , after_request handlers not run.
full disclosure, wrote flask-cors.
Comments
Post a Comment