如何在webpy中服务文件?

8 投票
4 回答
12440 浏览
提问于 2025-04-16 10:19

我正在使用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()

撰写回答