如何在 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 中提供文件?的主要内容,如果未能解决你的问题,请参考以下文章