在烧瓶app中捕获所有路径

Luk*_*don 4 javascript python html5 flask angularjs

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

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

输出404

 * Restarting with reloader
127.0.0.1 - - [23/Jan/2014 13:41:48] "GET /ass HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)

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

tur*_*kus 8

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

@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())
Run Code Online (Sandbox Code Playgroud)

所以:

@app.route("/<string:path>")
Run Code Online (Sandbox Code Playgroud)

不见了.它捕获字符串变量(不是路径),所以在你的情况下,只是ass从你的例子,当你尝试点击http:// localhost:5000/ass.


tbi*_*icr 6

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

因此,如果您有其他规则,则必须查看规则优先级(请参阅/sf/answers/1200259441/).

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

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