2015-10-05 60 views
1

這裏是我的類:爲什麼我不需要在符合WSGI的應用程序中傳遞所需的2個位置參數?

class App(object): 

    def __init__(self, environ, start_response): 
     self.environ = environ 
     self.start_response = start_response  
     self.html = \ 
     b""" 
      <html> 
       <head> 
        <title>Example App</title> 
       </head> 
       <body> 
        <h1>Example App is working!</h1> 
       </body> 
      </html> 
     """ 

    def __call__(self): 
     self.start_response("200 OK", [("Content-type", "text/html"), 
             ('Content-Length', str(len(self.html)))]) 

     return [self.html] 

然後我運行它:

app = App() 

我在Apache的錯誤日誌中得到一個類型錯誤(顯然):

TypeError: __init__() missing 2 required positional arguments: 'environ' and 'start_response'\r 

的問題是我看到的每一個例子,他們只是不通過這些論點... This one for example

class Hello(object): 

    def __call__(self, environ, start_response): 
     start_response('200 OK', [('Content-type','text/plain')]) 
     return ['Hello World!'] 

hello = Hello() # ????????????? 

我該如何傳遞這些參數並避免類型錯誤,如果每個示例都省略它們?

+0

你加ENVIRON和start_response到__init__ - 爲什麼?查看您鏈接的頁面上的下一個示例,以瞭解編寫__init__的示例。 –

回答

3

您誤讀了api文檔。你的__init__方法可以採取你想要的任何參數(在你的App例子中,你可能不需要除self以外的任何其他參數)。那麼你的__call__方法是需要具有environ和start_response參數的方法,並且WSGI服務器不直接調用__call__

像這樣的東西是你想要的..

class App(object): 

    def __init__(self, name): 
     self.name = name 
     self.html = \ 
     b""" 
      <html> 
       <head> 
        <title>{name}</title> 
       </head> 
       <body> 
        <h1>{name} is working!</h1> 
       </body> 
      </html> 
     """.format(name=self.name) 

    def __call__(self, environ, start_response): 
     start_response("200 OK", [("Content-type", "text/html"), 
            ('Content-Length', str(len(self.html)))]) 

     return [self.html] 

app = App('Example App') 
相關問題