Skip to content

Instantly share code, notes, and snippets.

@j0lvera
Forked from richard-flosi/bottle-cors.py
Created October 29, 2016 04:28
Show Gist options
  • Save j0lvera/02131dc9eae06db5b9a6cae8ef4b1fcf to your computer and use it in GitHub Desktop.
Save j0lvera/02131dc9eae06db5b9a6cae8ef4b1fcf to your computer and use it in GitHub Desktop.
Bottle with Cross-origin resource sharing (CORS)
"""
Example of setting up CORS with Bottle.py.
"""
from bottle import Bottle, request, response, run
app = Bottle()
@app.hook('after_request')
def enable_cors():
"""
You need to add some headers to each request.
Don't use the wildcard '*' for Access-Control-Allow-Origin in production.
"""
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'PUT, GET, POST, DELETE, OPTIONS'
response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'
@app.route('/examples', method=['OPTIONS', 'GET'])
def examples():
"""
If you are using something like Spine.js you'll need to
handle requests for the OPTIONS method. I haven't found a
DRY way to handle this yet. I tried setting up a hook for before_request,
but was unsuccessful for now.
"""
if request.method == 'OPTIONS':
return {}
else:
return {'examples': [{
'id': 1,
'name': 'Foo'},{
'id': 2,
'name': 'Bar'}
]}
if __name__ == '__main__':
from optparse import OptionParser
parser = OptionParser()
parser.add_option("--host", dest="host", default="localhost",
help="hostname or ip address", metavar="host")
parser.add_option("--port", dest="port", default=8080,
help="port number", metavar="port")
(options, args) = parser.parse_args()
run(app, host=options.host, port=int(options.port))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment