首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

来自Angular的Flask python API CORS问题

跨域资源共享(CORS)问题通常发生在浏览器尝试从一个域向另一个域发送请求时,而服务器没有正确配置允许这种跨域请求

以下是解决Flask应用中CORS问题的几种方法:

方法1:使用Flask-CORS扩展

Flask-CORS是一个Flask扩展,可以轻松地为你的应用添加CORS支持。首先,安装Flask-CORS:

代码语言:javascript
复制
pip install flask-cors

然后在你的Flask应用中使用它:

代码语言:javascript
复制
from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/api/data')
def get_data():
    data = {'key': 'value'}
    return jsonify(data)

if __name__ == '__main__':
    app.run()

这将允许所有域对你的API发起跨域请求。如果你想限制允许的域,可以使用origins参数:

代码语言:javascript
复制
CORS(app, origins=['http://localhost:4200'])

方法2:手动设置响应头

如果你不想使用Flask-CORS扩展,你可以手动设置响应头来允许跨域请求。在你的Flask应用中,为每个路由添加以下响应头:

代码语言:javascript
复制
from flask import Flask, jsonify, make_response

app = Flask(__name__)

@app.route('/api/data')
def get_data():
    data = {'key': 'value'}
    response = make_response(jsonify(data))
    response.headers.add('Access-Control-Allow-Origin', '*')
    response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
    response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
    return response

if __name__ == '__main__':
    app.run()

这将允许所有域对你的API发起跨域请求。与Flask-CORS扩展类似,你可以通过修改Access-Control-Allow-Origin头来限制允许的域。

方法3:处理预检请求

对于某些请求(如带有自定义头的请求或非GET/POST请求),浏览器会先发送一个预检请求(OPTIONS请求)。你需要确保你的Flask应用能够正确处理这些预检请求。

代码语言:javascript
复制
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['GET', 'POST', 'OPTIONS'])
def get_data():
    if request.method == 'OPTIONS':
        response = app.make_default_options_response()
        response.headers.add('Access-Control-Allow-Origin', '*')
        response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
        response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
        return response

    data = {'key': 'value'}
    response = make_response(jsonify(data))
    response.headers.add('Access-Control-Control-Origin', '*')
    response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
    response.headers + response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
    return response

if __name__ == '__main__':
    app.run()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券