问题

在使用 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方式初始化。

参考