[英]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.