如何在webpy中服务文件?
我正在使用webpy框架。我想在某个请求中提供一个静态文件。请问在webpy框架中有没有特别的方法,还是说我只需要读取并返回那个文件就可以了?
4 个回答
1
我不建议用 web.py 来提供静态文件。你最好还是用 apache 或 nginx 来配置这些文件。
6
我花了几个小时在这个问题上纠结... 真让人头疼!
我找到两个解决办法,都对我有效...
1 - 在 .htaccess 文件中,在 ModRewrite 之前加上这一行:
RewriteCond %{REQUEST_URI} !^/static/.*
这样可以确保对 /static/ 目录的请求不会被重写到你的 code.py 脚本里。
2 - 在 code.py 中添加一个静态处理器,并为每个目录添加一个网址入口:
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 的模板中,还是直接调用我放在 "static" 文件夹里的网页。
11
如果你正在运行开发服务器(没有使用apache):
首先,在运行web.py服务器的脚本所在的位置创建一个叫做static的文件夹。然后把你想要提供的静态文件放到这个static文件夹里。
举个例子,网址 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()