目前,前后端分离的场景越来越多,涉及到前后端分离,我们就绕不开跨站。很多人使用flask的CORS,依然解决不了跨域,结合我开发平台的经验。跨站主要分为2步走。
第一步:在app.py中设置CORS
1、通过pip install 安装flask_cors,如果是linux非root登录的账户,需要执行:sudo pip install flask_cors
2、在app.py文件中引入flask_cors
3、在app入口使用CORS
代码如下:
#设置路径信息,避免通过命令行启动的时候,找不到软件包
import os,sys
curpath = os.path.abspath(os.path.dirname(__file__))
rootpath = os.path.split(curpath)[0]
sys.path.append(rootpath)
#引入flask组件
from flask import Flask
#引入flask cors
from flask_cors import CORS
#程序主入口
if __name__ == ‘__main__‘:
#实例化flask
app = Flask(__name__)
#通过CORS,所有的来源都允许跨域访问
CORS(app, resources=r‘/*‘)
#接受任何ip地址的访问,并且使用多线程,设置接口为8081,不启动debug模式
app.run(host="0.0.0.0", threaded=True, port=8081, debug=False)
?
第二步:
在各个blueprint中的路由设置请求头
import os, sys
curpath = os.path.abspath(os.path.dirname(__file__))
rootpath = os.path.split(curpath)[0]
sys.path.append(rootpath)
from flask import Blueprint, request, jsonify
from api import Timer
build = Blueprint("build", __name__)
@build.route(‘/builder/job‘, methods=[‘POST‘])
def JobBuild():
res_dict = request.get_json()
rst = jsonify(Timer.StartCron(ref_dict=res_dict))
#在路由返回信息中设置请求头,允许远程访问
rst.headers[‘Access-Control-Allow-Origin‘] = ‘*‘
rst.headers[‘Access-Control-Allow-Method‘] = ‘POST‘ #如果该请求是get,把POST换成GET即可
rst.headers[‘Access-Control-Allow-Headers‘] = ‘x-requested-with,content-type‘
return rst
?
第三步:验证结果
前端请求访问成功
?
总结:
其实设置跨站很容易,主要是在app.py主程序入库设置CORS之后,在各个路由下再次设置header内容,缺一不可。
大家在使用python中有任何问题,欢迎留言,我将尽快给大家解答
?