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

时间:2018-04-16 13:23:53

标签: python node.js reactjs flask production-environment

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

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

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

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

谢谢你的建议, RicardoGonçalves

2 个答案:

答案 0 :(得分:7)

是的,可以使用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路径将显示烧瓶的响应。

答案 1 :(得分: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()