我正在制作一台服务器,将Rmarkdown转换为Dash应用程序。这个想法是解析rmd文件中的所有参数并进行相应的Dash输入。然后添加一个提交按钮,将rmd编译为html并在iframe中返回。我使用外部数据库存储rmd路径的信息,以便用户可以动态添加文件。问题是当rmd文件更改时,服务器必须重新解析该文件并重新创建应用程序并以相同的网址进行投放。我没有一个优雅的解决方案。现在我正在做这样的事情。
server = Flask(__name__)
@server.route(“rmd/path:path”):
def convert_rmd_to_dash(path):
file = get_file_path_from_db(path)
mtime = get_last_modified_time(file)
cached_app, cached_mtime = get_cache(path)
if cached_mtime == mtime:
return cached_app
inputs = parse_file(file)
app = construct_dash_app(inputs)
return app.index()
def construct_dash_app(inputs):
app = dash.Dash(
name,
server=server,
routes_pathname_prefix=’/some_url_user_will_never_use/’ + file_name + time.time())
app.layout = …
…
return app
它可以工作,但是我在/ some_url_user_will_never_use下有很多路由规则。可能可以直接覆盖rmd / path,但基于Stackoveflow的answer可能会显得有些骇人听闻。有更好的解决方案吗?谢谢。