2011-08-05 9 views
6

ローカルにnginxを設定して実行する必要がなく、webpy静的ディレクトリを変更したいと思っています。今のところ、webpyは/ static /が存在する場合にのみ静的ディレクトリを作成します。私の場合は、静的ディレクトリとして/ foo/bar /を使いたいが、これを設定することに関連する情報を見つけることができなかった。webpyの静的ディレクトリパスを変更する

これはローカルでの使用のみを目的としたものであり、プロダクションではありません。何か案は?おかげ

答えて

5

あなたが同じパスに別のディレクトリを持っている必要がある場合、あなたはweb.httpserver.StaticMiddlewareをサブクラス化したり(PATH_INFOを変更することによって、そのトリックStaticApp)このような独自のミドルウェアを書くことがあります。

import web 
import os 
import urllib 
import posixpath 

urls = ("/.*", "hello") 
app = web.application(urls, globals()) 

class hello: 
    def GET(self): 
     return 'Hello, world!' 


class StaticMiddleware: 
    """WSGI middleware for serving static files.""" 
    def __init__(self, app, prefix='/static/', root_path='/foo/bar/'): 
     self.app = app 
     self.prefix = prefix 
     self.root_path = root_path 

    def __call__(self, environ, start_response): 
     path = environ.get('PATH_INFO', '') 
     path = self.normpath(path) 

     if path.startswith(self.prefix): 
      environ["PATH_INFO"] = os.path.join(self.root_path, web.lstrips(path, self.prefix)) 
      return web.httpserver.StaticApp(environ, start_response) 
     else: 
      return self.app(environ, start_response) 

    def normpath(self, path): 
     path2 = posixpath.normpath(urllib.unquote(path)) 
     if path.endswith("/"): 
      path2 += "/" 
     return path2 


if __name__ == "__main__": 
    wsgifunc = app.wsgifunc() 
    wsgifunc = StaticMiddleware(wsgifunc) 
    wsgifunc = web.httpserver.LogMiddleware(wsgifunc) 
    server = web.httpserver.WSGIServer(("0.0.0.0", 8080), wsgifunc) 
    print "http://%s:%d/" % ("0.0.0.0", 8080) 
    try: 
     server.start() 
    except KeyboardInterrupt: 
     server.stop() 

それとも、 "静的"という名前のシンボリックリンクを作成し、それを別のディレクトリに向けることができます。

+0

ありがとうございます! 'AttributeError: 'module'オブジェクトに 'StaticMiddleware''Adaptive属性がありません。 –

+0

' print web .__ version__'の出力は何ですか?これはPython 2.6.1とweb.py 0.36で動作します。 –

+0

ああ、私は0.32です。私は0.36にアップグレードし、それは動作しますが、私が必要とするものは100%ではありません。私は静的//foo /静的/にマップする必要があります。助けてくれてありがとう! –

関連する問題