Flask和React路由

时间:2015-06-03 12:35:31

标签: python reactjs flask url-routing

我正在使用React构建Flask应用程序,我最终遇到了路由问题。

后端负责成为API,因此有些路由如下:

@app.route('/api/v1/do-something/', methods=["GET"])
def do_something():
    return something()

和通往React的主要路线:

@app.route('/')
def index():
    return render_template('index.html')

我在React应用程序中使用react-router,一切正常,反应 - 路由器将我带到/something并获得渲染视图,但是当我在{{1}上刷新页面时然后Flask应用程序处理此调用,我收到/something错误。

什么是最佳解决方案?我正在考虑将所有未调用Not Found的呼叫重定向到/api/v1/...这不理想,因为我将返回我的应用的主页,而不是渲染的React视图。

4 个答案:

答案 0 :(得分:30)

我们使用了catch-all URLs

var myvalue = myobject.title.replace(/\s*-\s*$/,'');

您还可以加倍使用from flask import Flask app = Flask(__name__) @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def catch_all(path): return 'You want path: %s' % path if __name__ == '__main__': app.run() 系统将Flask routing与客户端匹配到相同的路由,这样您就可以将客户端需要的数据嵌入到HTML响应中作为JSON。

答案 1 :(得分:1)

可能是之前答案的延伸。这解决了我的问题:

from flask import send_from_directory

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def serve(path):
     path_dir = os.path.abspath("../build") #path react build
     if path != "" and os.path.exists(os.path.join(path_dir, path)):
         return send_from_directory(os.path.join(path_dir), path)
     else:
         return send_from_directory(os.path.join(path_dir),'index.html')

答案 2 :(得分:0)

由于某种原因,所有URL都不适合我。我发现使用Flask 404处理程序会产生完全相同的结果。它会看到该URL并将其传递给路由器以响应该URL。

@app.errorhandler(404)   
def not_found(e):   
  return app.send_static_file('index.html')

答案 3 :(得分:0)

仅通知处理错误404和render_template对我来说是完美的。

@app.errorhandler(404)
def not_found(e):
    return render_template("index.html")