5

我正在使用 Flask 开发 SAAS 应用程序,我希望用户能够创建/上传/使用他们自己的自定义模板。这就是我现在的目录结构:

/flaskapp
    /application.py
    /static
        /style.css
    /templates (site & admin templates goes here)
        /hello.html
    /userdata
        /user1
            /template1
                 hello.html
            /template2
                 hello.html
        /user2
            /template1
                 hello.html
            /template2
                 hello.html

我可以使用通过这个 stackoverflow 问题找到的解决方案为用户指定的模板提供服务:如何动态选择要在烧瓶中使用的模板目录?但是如何从模板目录提供静态文件。而不是从我提供静态文件,/flaskapp/static/我想使用/flaskapp/userdata/<user>/<current-template>/static/目录提供静态文件,并且将在运行时动态确定。这个怎么做?

4

2 回答 2

1

大概你在 Flask 前面使用了一个网络服务器。解决此问题的一种方法(我通常在将 Apache + mod_wsgi 用于自定义 WSGI 应用程序时使用)是通过 Web 服务器直接从磁盘提供目录。在 Apache 上,我只是为此使用 Alias 指令。

如果您想改变每个用户在给定 URL 下提供的文件,则必须通过 Flask 管道传输文件。您必须弄清楚如何正确路由请求;之后,您也许可以使用wsgi.file_wrapper来发送正确的文件(尽管我不确定您是如何通过 Flask 获得的)。

于 2013-01-03T12:37:26.833 回答
0

这是我用来从任何系统目录提供文件的东西。

该应用程序在特定目录中搜​​索特定请求的文件:

当有人访问http:/host/where/to/serve/files/example_file.txt时,应用程序将尝试返回example_file.txt作为附件,如果文件不存在,它将返回 404。

您可以调整它并使用您的用户变量构建 DIRECTORY_TO_SERVE_PATH。

如果您有任何限制,您还应该验证要提供的文件,因为这会返回路径中存在的任何文件

import os
from flask import abort, send_from_directory


DIRECTORY_TO_SERVE_PATH = '/where/files/are/in/disk/'


@app.route('/where/to/serve/files/<path:filename>')
def download_file(filename):
    if os.path.exists(DIRECTORY_TO_SERVE_PATH + filename):
        return send_from_directory(DIRECTORY_TO_SERVE_PATH, filename, as_attachment=True)
    else:
        abort(404)
于 2016-09-02T10:47:03.857 回答