在Bottle

时间:2018-10-03 20:58:04

标签: python bottle

关于如何设置CORS标头以允许瓶中所有请求的来源都有大量信息,主要是使用Hooks插件和使用“后请求”。 (https://bottlepy.org/docs/dev/recipes.html

但是,我有10条路由,我只想在其中一条上启用CORS请求。可以使用hooks插件来做到这一点吗?

如果没有,我应该为特定路线实施OPTIONS方法吗?

2 个答案:

答案 0 :(得分:0)

如果只是一条路由,为什么不只将CORS标头应用于那条路由?您还可以使用装饰器类将标头添加到所需的任何路由。

答案 1 :(得分:0)

您应该创建如下所示的通用路由来拦截对方法OPTIONS的任何请求,然后添加一个钩子以将CORS标头应用于所有请求:

import bottle

# This route capture all route for method OPTIONS
@bottle.route('/<:re:.*>', method='OPTIONS')
def cors():
    pass

headers = ['Origin', 'Accept', 'Content-Type',
           'X-Requested-With', 'X-CSRF-Token',
           'Authorization']
HEADERS = ', '.join((headers + [h.lower() for h in headers]))

# For all request I add cors headers
def apply_cors():
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'GET, POST, DELETE, PUT, OPTIONS'
    response.headers['Access-Control-Allow-Headers'] = HEADERS

app = bottle.default_app()
app.add_hook('after_request', apply_cors)