在上一篇文章中,我利用Docker对Python Flask项目进行打包,并使用了Gitlab CI进行相关的CI/CD操作,最近这个项目遇到一个问题,利用Postman的测试接口的时候没有问题,但是用前端的网页去调用的时候就出现了跨域的问题。
经过搜索,发现有相应的Python包去解决这个问题,这个包叫做flask_cors,官方文档:https://pypi.org/project/Flask-Cors/,这个包类似node.js的cors包,配置好前端允许的请求头即可
这个项目中所有的接口都是对外的,所以需要一个全局的跨域设置
先引入flask_cors包:
from flask_cors import CORS
然后设置所有的路径都通过该跨域设置:
CORS(app, resources={r"/*": {"origins": "*"}})
由于本项目还用到了socket.io,于是对于socket.io来说也需要设置该跨域,方法也很简单,在初始化的参数加上即可:
socketio = SocketIO()
socketio.init_app(app, async_mode=None, cors_allowed_origins='*')
提交代码之后重新部署,即可解决这个问题
另外如果想对某些路由进行单独设置,这个包提供了一个很方便的方法,叫做装饰器法,在对应的方法上面声明@cross_origin()即可,也就是:
@app.route("/")
@cross_origin()
def helloWorld():
return "Hello, cross-origin-world!"