您的位置:首页 > 娱乐 > 八卦 > 怎样为Flask服务器配置跨域资源共享

怎样为Flask服务器配置跨域资源共享

2024/10/5 23:31:09 来源:https://blog.csdn.net/goldtimes/article/details/139655510  浏览:    关键词:怎样为Flask服务器配置跨域资源共享

为了在 Flask 服务器中配置跨域资源共享(CORS),你可以使用 flask-cors 扩展。这个扩展可以帮助你轻松地设置 CORS 规则,从而允许你的 Flask 服务器处理来自不同源的请求。

以下是配置 CORS 的步骤:

安装 flask-cors

首先,你需要安装 flask-cors 扩展。如果尚未安装,可以使用以下命令进行安装:

pip install flask-cors

配置 CORS

安装完成后,你可以在 Flask 应用中配置 CORS。以下是一个简单的示例:

from flask import Flask, request, jsonify, Response
from flask_cors import CORSapp = Flask(__name__)
CORS(app)  # 这将为所有路由启用CORS@app.route('/api/stream-chat', methods=['POST'])
def stream_chat():if request.is_json:data = request.get_json()prompt = data.get('prompt')if prompt is None:return jsonify({"error": "Missing 'prompt' field"}), 400history = data.get('history')if history is None:return jsonify({"error": "Missing 'history' field"}), 400if not isinstance(history, list):return jsonify({"error": "'history' field must be a list"}), 400response = Response(generate(message=prompt, chat_history=history), mimetype='application/json')response.headers['Content-Type'] = 'text/event-stream'response.headers['Cache-Control'] = 'no-cache'response.headers['Connection'] = 'keep-alive'return responseelse:return jsonify({"error": "Request body must be JSON"}), 400def generate(message, chat_history):import jsonimport timewhile True:data = {"prompt": message,"history": chat_history,"response": "Generated response based on input"}yield f"data:{json.dumps(data)}\n\n"time.sleep(1)if __name__ == '__main__':app.run(debug=True, threaded=True)

细粒度控制 CORS

如果你需要对 CORS 进行更细粒度的控制,比如只允许特定的域访问特定的路由,可以在 CORS 初始化时配置参数,或者使用装饰器。

允许特定域名
CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})
使用装饰器
from flask_cors import cross_origin@app.route('/api/stream-chat', methods=['POST'])
@cross_origin(origin='http://example.com')  # 仅允许来自 http://example.com 的请求
def stream_chat():# 你的处理逻辑

小结

通过配置 CORS,你可以允许来自不同源的请求访问你的 Flask 服务器。flask-cors 扩展提供了简便的方法来实现这一点,无论是全局配置还是针对特定路由的配置,都可以轻松实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com