问题
在使用 Flask 框架时,前端页面调用第三方 api 时,默认情况下浏览器会拦截请求。
可能会出现这样的错误提示:
已拦截跨源请求:同源策略禁止读取位于
http://xxxxx
的远程资源。(原因:CORS 头缺少’Access-Control-Allow-Origin’)
说明
前端页面在发送第三方 api 请求时,会先对自己的服务器发送 OPTION 请求,判断是否禁止跨源请求。
解决方案
- 安装 Flask-CORS
pip install -U flask-cors
- 初始化
简单初始化
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route("/")
def helloWorld():
return "Hello, cross-origin-world!"
正则匹配路由
app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
@app.route("/api/v1/users")
def list_users():
return "user example"
利用装饰器匹配路由
@app.route("/")
@cross_origin()
def helloWorld():
return "Hello, cross-origin-world!"
注意
匹配路由可以返回值,也可以不返回值
推荐使用装饰器匹配路由。
Flaks-CORS 也支持通过ini_app
方式初始化。