如何在 webpy 中提供文件?

Posted

技术标签:

【中文标题】如何在 webpy 中提供文件?【英文标题】:How to serve file in webpy? 【发布时间】:2011-06-12 16:44:59 【问题描述】:

我正在使用 webpy 框架叉。我想在其中一个请求上提供静态文件。 webpy框架中是否有特殊方法或者我只需要读取并返回该文件?

【问题讨论】:

【参考方案1】:

如果您正在运行开发服务器(没有 apache):

在运行 web.py 服务器的脚本的位置创建一个名为 static 的目录(也称为文件夹)。然后将您希望提供的静态文件放在静态文件夹中。

例如,URL http://localhost/static/logo.png 会将图像 ./static/logo.png 发送给客户端。

参考:http://webpy.org/cookbook/staticfiles


更新。如果您确实需要在 / 上提供静态文件,您可以简单地使用重定向:

#!/usr/bin/env python

import web

urls = (
  '/', 'index'
)

class index:
    def GET(self):
        # redirect to the static file ...
        raise web.seeother('/static/index.html')

app = web.application(urls, globals())

if __name__ == "__main__": app.run()

【讨论】:

仅在 /static 路径中提供文件,我需要根据请求提供 index.html 路径 / 这仅在您直接从其所在文件夹运行 web.py 应用程序时才有效。如果你想运行 /path/to/my/web/app.py 你就不走运了。【参考方案2】:

在过去的几个小时里,我一直在为此苦苦挣扎……糟糕!

找到了两个对我都有效的解决方案... 1 - 在 .htaccess 中在 ModRewrite 行之前添加此行:

RewriteCond %REQUEST_URI !^/static/.*

这将确保对 /static/ 目录的请求不会被重写以转到您的 code.py 脚本。

2 - 在 code.py 中为几个目录中的每一个添加一个静态处理程序和一个 url 条目:

urls = (
    '/' , 'index' ,
    '/add', 'add' ,
    '/(js|css|images)/(.*)', 'static', 
    '/one' , 'one'
    )

class static:
    def GET(self, media, file):
        try:
            f = open(media+'/'+file, 'r')
            return f.read()
        except:
            return '' # you can send an 404 error here if you want

注意 - 我从 web.py 谷歌组偷了这个,但再也找不到该死的帖子了!

其中任何一个都对我有用,无论是在 web.py 的模板中还是直接调用我放入“静态”的网页

【讨论】:

您是否发现这些方法比webpy.org/cookbook/staticfiles 更有优势? 我得到了这个工作 - 我无法让其他方法工作,所以我想这是一个优势 ;-) 我正在使用共享主机帐户,所以这可能是我的一些努力。 +1 - 当您想限制对您将提供的文件的访问时,这似乎是正确的解决方案。 作为警告,这将允许某人请求以下 URL:/images/../../../../somefile_you_dont_want_anyone_to_see @ZachDwiel - 谢谢!很高兴知道我把那个洞打开了。关于关闭它的好方法有什么想法吗?【参考方案3】:

我不建议使用 web.py 提供静态文件。您最好为此配置 apache 或 nginx

【讨论】:

为什么不呢?了解您的原因会很有帮助。 因为会很慢【参考方案4】:

其他答案对我不起作用。 您可以先在 app.py 中加载 html 文件,甚至可以在 app.py 中编写 html。 然后,可以让索引类的GET方法返回静态html。

index_html = '''<html>hello world!</html>'''

class index:
    def GET(self):
        return index_html

【讨论】:

以上是关于如何在 webpy 中提供文件?的主要内容,如果未能解决你的问题,请参考以下文章

Pythonwindows下Eclipse中安装集成webpy框架

pythonanywhere 部署 webpy

webpy 访问局域网共享资源

接口测试-webpy(自定义接口)

webpy中的会话-在所有类中获取用户名

如何用IIS安装PHP