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

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

以下是配置 CORS 的步骤:

安装 flask-cors

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

bash 复制代码
pip install flask-cors

配置 CORS

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

python 复制代码
from flask import Flask, request, jsonify, Response
from flask_cors import CORS

app = 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"}), 400

        history = data.get('history')
        if history is None:
            return jsonify({"error": "Missing 'history' field"}), 400

        if not isinstance(history, list):
            return jsonify({"error": "'history' field must be a list"}), 400

        response = 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 response
    else:
        return jsonify({"error": "Request body must be JSON"}), 400

def generate(message, chat_history):
    import json
    import time
    while 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 初始化时配置参数,或者使用装饰器。

允许特定域名
python 复制代码
CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})
使用装饰器
python 复制代码
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 扩展提供了简便的方法来实现这一点,无论是全局配置还是针对特定路由的配置,都可以轻松实现。

相关推荐
KaMeidebaby7 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
Cloud_Shy6188 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
lizhihai_9932 分钟前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
天佑木枫34 分钟前
15天Python入门系列 · 序
开发语言·python
happylifetree34 分钟前
Python017-第二章15.数据容器-dict常用操作
python
装不满的克莱因瓶1 小时前
了解 LangChain 中的 LLM 与 ChatModel 的差异
人工智能·python·ai·langchain·llm·agent·chatmodel
黄同学real1 小时前
解决 Visual Studio Web Deploy 远程发布报 401 未授权 (ERROR\_USER\_UNAUTHORIZED)
服务器
天天进步20151 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
IT知识分享2 小时前
从零开发在线简繁转换工具:OpenCC 实战、避坑经验与方案选型
javascript·python
lunzi_08262 小时前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习