在烧瓶app中捕获所有路径

时间:2014-01-23 13:54:00

标签: javascript python html5 angularjs flask

我在heroku上托管的Angular + Flask中编写了一个应用程序。我一直在寻找使用html5mode来使用myapp.co/register作为oauth。 html5mode的问题是,如果有人刷新页面或单击非root用户的链接,服务器需要重写url。我尝试使用this代码段来捕获它们,但它不起作用。

@app.route("/", defaults={"path": ""})
@app.route("/<path:path>")
def index(path):
  print path
  return make_response(open(app.static_folder + "index.html").read())

输出404

 * Restarting with reloader
127.0.0.1 - - [23/Jan/2014 13:41:48] "GET /ass HTTP/1.1" 404 -

应用程序获得root服务器index.html和/ api / v1 /即RESTful api

2 个答案:

答案 0 :(得分:7)

你需要使用比你更多的东西:

@app.route("/", defaults={"path": ""})
@app.route("/<string:path>") <--- this is missing
@app.route("/<path:path>")
def index(path):
  print path
  return make_response(open(app.static_folder + "index.html").read())

所以:

@app.route("/<string:path>")

缺少。它会捕获字符串变量(而不是路径),因此在您的情况下,只有ass来自您的示例,当您尝试点击http://localhost:5000/ass时。

答案 1 :(得分:6)

如果您没有更多优先级更高的路由,您的代码将捕获所有网址。但看起来它应该返回500错误(因为我希望你没有<app_path>/staticindex.html并使用不安全的方法来发送文件)。

因此,如果您有其他规则,则必须查看规则优先级(请参阅https://stackoverflow.com/a/17146563/880326)。

如果您对此路线有错误,请更好地使用:

@app.route("/", defaults={"path": ""})
@app.route("/<path:path>")
def index(path)
    return send_from_directory(app.static_folder, "index.html")