簡體   English   中英

繼承Webapp2 Google App引擎錯誤

[英]Inheriting webapp2 google App engine error

嗨,我在Google Appengine中有以下代碼。當調用Rot13的get時,出現以下錯誤:

處理程序= self.handler(請求,響應)

TypeError: init ()正好接受1個參數(給定3個)

class BaseHandler(webapp2.RequestHandler):
    def no_caches(self):
        self.response.headers["Pragma"]="no-cache"
        self.response.headers["Cache-Control"]="no-cache, no-store, must-revalidate,  pre-check=0, post-check=0"
        self.response.headers["Expires"]="Thu, 01 Dec 1994 16:00:00"

    def render_str(self,template,**params):
        t=jinja_env.get_template(template)
        return t.render(params)

    def render(self,template,**kw):
        self.response.out.write(self.render_str(template,**kw))

    def write(self,*a,**kw):
        self.response.out.write(*a,**kw)

class Rot13(BaseHandler):

  def __init__(self):
    #BaseHandler.__init__(self) not working too
    self.no_caches()          

  file='rto13.html'

  def convert_rto13(self,s):
      return s.encode('rot13')

  def get(self):
      self.render(self.file,text='',status='welcome')

  def post(self):
     text=self.request.get('text')
     if not text:
        return self.render(self.file,text='',status='You have to enter something')
     rot13=self.convert_rto13(text)
     self.render(self.file,text=rot13,status='translated')

除非您接受所有參數,並且您調用super,否則您不能過度使用BaseHandler RequestHandler__ init __處理程序。 僅僅盲目地重寫__ init __方法而不調查父類中的____方法是問題的根源-因此就是您的問題。

記錄了針對webapp2的RequestHandler。 https://webapp-improved.appspot.com/api/webapp2.html#webapp2.RequestHandler

具體來說,它說的是class webapp2.RequestHandler(request=None, response=None)

因此,Rot13中的重寫BaseHandler的init方法應類似於

def __init__(self,request,response):
    super(Rot23,self).__init__(request,response)
    # more stuff here.

RequestHandler的文檔所示,它帶有兩個參數:request和response。 您的__init__需要接受這些*args, **kwargs甚至最好接受*args, **kwargs並將它們傳遞給超類。

問題出在no_caches()函數中。

def no_caches(self):
    self.response.headers["Pragma"]="no-cache"
    self.response.headers["Cache-Control"]="no-cache, no-store, must-revalidate,  pre-check=0, post-check=0"
    self.response.headers["Expires"]="Thu, 01 Dec 1994 16:00:00"

輸入多個標題時,請使用addheaders(field,value)代替。

def no_caches(self):
    self.response.headers["Pragma"]="no-cache"
    self.response.headers.add_header("Cache-Control","no-cache, no-store, must-revalidate,  pre-check=0, post-check=0")
    self.response.headers.add_header("Expires","Thu, 01 Dec 1994 16:00:00")

https://developers.google.com/appengine/docs/python/tools/webapp/redirects

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM