继承webapp2 google App engin

2024-04-19 14:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有以下谷歌代码什么时候名为get of Rot13,我得到以下错误:

handler = self.handler(request, response)

TypeError: init() takes exactly 1 argument (3 given)

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')

Tags: notextselfgetreturninitresponsedef
3条回答

除非接受它的所有参数并调用super,否则您不能重写RequestHandlerinit处理程序。只是盲目地重写一个initinit方法,而不调查它在父类中的作用,这是导致问题的一个方法,因此会出现问题。在

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.

问题出在no\u 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(字段,值)。在

^{pr2}$

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

the documentation for RequestHandler所示,它有两个参数:request和response。您的__init__也需要接受它们,或者更好地接受*args, **kwargs,并将它们传递给超级类。在

相关问题 更多 >