解决Bottle跨域问题--通过@hook解决

       今天在使用bottle的时候,前端访问请求后端一直出现跨域问题,如下:

Access to XMLHttpRequest at 'http://127.0.0.1:8080/hello' from origin 
'http://localhost:63343' has been blocked by CORS policy: No 'Access-
Control-Allow-Origin' header is present on the requested resource.

       本来就不怎么会前端,又碰到了大名鼎鼎的跨域问题很是烦躁,问同学说跨域问题解决方案就跟茴香豆的写法一样多,彻底无语。
       百度了很多答案,无非是使用@hook与修改Bottle源码,我一一试了下都不管用,也不知道为什么就是提示跨域。
       第二天继续查找解决办法,看了很多还是不行,最后看到这篇博客:https://simpledao.win/2018/05/20/python-bottle%E8%A7%A3%E5%86%B3%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/。办法依旧是使用@hook,复制进自己的代码中还是不管用。
       最后我发现我import的好像比较少,就把他引用的模块也复制进去了,神奇的事情发生了,竟然成功了!!!

image.png

       我没有引用response,这竟然也会导致跨域!!
       网上大多数解决方案都只有一小部分代码,忽略了导入模块的问题,怪不得我好久都没解决。最后附上我很简陋的测试代码。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 错误版本
# from bottle import template, Bottle, hook
from bottle import template, Bottle, response

root = Bottle()

# 解决跨域问题https://simpledao.win/2018/05/20/python-bottle%E8%A7%A3%E5%86%B3%E8%B7%A8%E5%9F%9F%E9%97%AE%E9%A2%98/
@root.hook('after_request')
def enable_cors():
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, OPTIONS'
    response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'

@root.route('/hello')
def index():
    return "hello world"


root.run(host='127.0.0.1', port=8080)

       希望能帮助到大家。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。