2011-08-05 14 views
6

में स्थिर निर्देशिका पथ बदलना मुझे स्थानीय रूप से nginx को सेट अप करने और चलाने की आवश्यकता के बिना वेबपी स्थिर निर्देशिका को बदलने में सक्षम होना पसंद है। अभी, ऐसा लगता है कि वेबपी केवल स्थिर स्थिति बनायेगी यदि/स्थिर/मौजूद है। मेरे मामले में, मैं अपनी स्थिर निर्देशिका के रूप में/foo/bar/का उपयोग करना चाहता हूं, लेकिन इसे कॉन्फ़िगर करने से संबंधित कोई भी जानकारी नहीं मिल सका (स्थानीय रूप से अपाचे या nginx चलाने के अलावा)।वेबपी

यह केवल स्थानीय उपयोग के लिए है, उत्पादन नहीं। कोई विचार? धन्यवाद

उत्तर

5

आप तो आप (PATH_INFO संशोधित करके यह चाल StaticApp) web.httpserver.StaticMiddleware उपवर्ग या इस तरह अपने खुद के मिडलवेयर लिख सकते हैं एक ही पथ के लिए अलग निर्देशिका की आवश्यकता है:

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

धन्यवाद! मुझे मिलता है: 'विशेषता त्रुटि:' मॉड्यूल 'ऑब्जेक्ट में कोई विशेषता नहीं है' स्टेटिक मिडलवेयर ' –

+0

' प्रिंट वेब .__ संस्करण__' का आउटपुट क्या है? यह पायथन 2.6.1 और वेब.py 0.36 के साथ काम करता है। –

+0

आह, मैं 0.32 पर हूं। मैंने 0.36 तक अपग्रेड किया और यह काम करता है, लेकिन मुझे 100% की आवश्यकता नहीं है। मुझे नक्शा/स्थैतिक/टू/foo/static/करने की आवश्यकता है। सहायता के लिए धन्यवाद! –

संबंधित मुद्दे