首页 文章

通过Flask-Python为React 生产环境 应用程序(本地服务器)提供服务

提问于
浏览
2

我正在使用这两种技术生成一个应用程序:React-app和Flask-Python . 它旨在运行一个react客户端来表示从Flask-server接收的数据 . 烧瓶服务器和react客户端在同一台机器上并通过套接字(SocketIO)进行通信 .

在开发模式下,为了运行应用程序,我必须使用npm start(节点)和带有python的烧瓶服务器运行react服务器 .

在 生产环境 模式下,在构建反应服务器之后,我必须使用Node上可用的服务选项来提供构建文件夹 . 否则应用程序将无法正常工作(我认为它是因为我使用react-router,当我去反应应用程序的另一个地方时,浏览器无法找到指定的URL . 使用Node的服务选项提供build文件夹,没问题出现) .

所以,我的问题是:我可以使用flask而不是节点的服务选项来提供我的反应应用程序的构建文件夹吗?我想这样做,以消除Nodejs依赖 . 有了,如果我想在另一台机器上运行我的应用程序,我将不必安装节点 .

感谢RicardoGonçalves的建议

2 回答

  • 6

    是的,可以使用 static 文件夹/文件在烧瓶中进行 . 您需要在项目中创建一个名为 static 的文件夹 . 想象一下这个文件夹结构:

    ├── server/
    └── static/
        ├── css/
        ├── dist/
        ├── images/
        └── js/
            index.html
    

    对于您的反应应用程序,您唯一需要做的就是构建 npm run build .

    在烧瓶中,您应该设置此静态文件夹以便使用 . 您需要一个简化版本:

    # server.py
    from flask import Flask, render_template
    
    app = Flask(__name__, static_folder="../static/dist", template_folder="../static")
    
    @app.route("/")
    def index():
        return render_template("index.html")
    
    @app.route("/hello")
    def hello():
        return "Hello World!”
    
    if __name__ == "__main__":
    app.run()
    

    所以根路径 / 将显示反应 . /hello 路径将显示来自flask的响应 .

  • 1

    所以我通过这样做得到了这个:

    • 用我的反应应用程序
    npm run build
    

    我的应用程序结构现在是:

    ├── server-flask/
        ├── ...
        ├── static/
    ├── react-app/
          ├── ...
          ├── build/
    
    • 将构建文件夹的内容复制到/ server-flask / static .

    • 我的烧瓶代码看起来像这样:

    from flask import Flask, send_from_directory
    import os
    
    app = Flask(__name__, static_folder="/static")
    
    
    @app.route('/', defaults={'path': ''})
    @app.route('/<path:path>')
    def serve(path):
        if path != "" and os.path.exists("/static/" + path):
            return send_from_directory('static', path)
        else:
            return send_from_directory('static', 'index.html')
    
    if __name__ == "__main__":
        app.run()
    

相关问题