从子应用程序中提供静态文件网页.py

2024-10-03 00:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个web应用程序网页.py{I)作为一个独立的应用程序}(作为一个应用程序的扩展)来转发。我遇到的问题是,当它被用作子应用程序时,静态文件不能很容易地从它自己的静态目录中提供服务。由于我打算分发此文件(不要求用户将文件合并到其项目的静态目录中),因此我希望目录结构为:

app_that_is_using_mongs (not mine)
    static (which holds the app's static files - also not mine)
    mongs (my subapp)
        main.py (the code for mongs)
        view (holds templates)
        static (the static folder for mongs)
    main.py (the code for the app that is using mongs)

…这样整个mongs目录就与正在使用它的应用程序分开。在

我考虑了几种可能的方法来实现这一点:

  • 使用从静态目录读取和输出文件的请求处理程序,例如:

    cwd = os.path.dirname(__file__) + '/'  # get current working directory
    
    class Static:
        def GET(self, filename):
            """searches for and returns a requested static file or 404s out"""
            try:
                return open(cwd + 'static/' + filename, 'r').read()
            except:
                web.application.notfound(app)  # file not found
    

对于大文件,我不确定这个解决方案的性能,似乎这应该是个问题网页.py可以自己做。在

  • 通过访问樱桃.py通过staticdir工具网页.py... 我不知道如何做这样的事情(直接与服务器交互网页.py如果我切换到一个Gunicorn服务器(或者其他服务器,但是樱桃.py).

  • 解决这个问题网页.py处理静态文件以使其更可扩展。。。如果没有其他方法,则重写网页.py或许把它推到主要回购市场可能是最好的办法。

那么,最好的方法是什么?在


Tags: 文件the方法py服务器目录app应用程序
1条回答
网友
1楼 · 发布于 2024-10-03 00:29:56

在网页.py静态资产不通过应用程序路由器提供服务。相反,http服务器会检查请求url是否以/static开头。这意味着无论是否有子应用程序,/static/...直接映射到根应用程序中的static目录。在

您构建静态类的第一个想法肯定会奏效,但您是对的,它有一个明确的性能含义-尽管,您必须对它进行基准测试,以真正了解它有多糟糕。在

另一个选项,操作上更糟,但是一个临时的解决方案,就是从父应用程序的静态目录创建一个软链接到子应用程序的静态目录。i、 e

parent_app/
    static/
        sub_app/ -> parent_app/sub_app/static/sub_app
        ...
    sub_app/
        static/
            sub_app/
                ...

然后,当您想从sub_app访问一个静态资产时,您将点击一个如下的url:/static/sub_app/asset。由于这个url以/static开头,它将被http服务器捕获并重定向到static目录,跟随软链接,并解析为实际资产。由于sub_app目录,此解决方案将在直接运行子应用程序或运行父应用程序时工作。您必须在部署到的每台服务器上以及每个开发环境上设置此软链接,这使得这一点不太理想。在

相关问题 更多 >