2012-08-01 69 views
-1

我有一个名为BlogHandler的类,它具有一些基本功能。我将这个类传递给另一个名为MainPage的类。我想在我的MainPage类中使用来自BlogHandler的函数,但它说它没有被定义。Python中的类继承和Cookie

class BlogHandler: 
    def read_secure_cookie(self, name): 
     cookie_val = self.request.cookies.get(name) 
     return cookie_val and check_secure_val(cookie_val) 


class MainPage(BlogHandler): 
    def post(self): 
     email = self.request.get('email') 
     product = self.request.get('product') 
     username = read_secure_cookie('content') 

cookie的 '内容' 是14 | b670fedff24f182e52a1ceacf7790e02。我如何返回'cookie_val'和'cookie_val'的第一部分(14)。

感谢

+1

看来这里有两个问题,如果我没有弄错的话。对于第二个(如何返回'cookie_value'的第一部分),您可以在'|'字符上简单地[split](http://docs.python.org/library/stdtypes.html#str.split):' first_part = cookie_value.split('|')[0]'。 – Chris 2012-08-01 18:58:46

+0

Chris-谢谢。我还需要知道如何获得cookie_val而不是返回语句的第二部分 – 2012-08-01 19:05:49

+0

我认为@mach在他编辑的答案中已经解决了这个问题。这是你的意思吗?将来你应该只在每个帖子中提出一个问题。 – Chris 2012-08-01 19:13:03

回答

2

对于第一个错误,你需要使用:

self.read_secure_cookie('content') 

任何超类方法也必须用self调用。 (还有其他的方法,但这是最好的做法。)

至于纠正你的另一个问题(我假设你想返回多个值),只需使用逗号而不是and

return cookie_val, check_secure_val(cookie_val) 

对于你的第三个问题,拆分为克里斯说:

cookie_value.split('|')[0] 

全部放在一起:

class BlogHandler: 
    def read_secure_cookie(self, name): 
     cookie_val = self.request.cookies.get(name) 
     return cookie_val, check_secure_val(cookie_val) 

class MainPage(BlogHandler): 
    def post(self): 
     email = self.request.get('email') 
     product = self.request.get('product') 
     cookie_val, cookie_secure_val = self.read_secure_cookie('content') 
     username = cookie_val.split("|")[0] 

如果我没有正确理解你,请说出来!

+0

mach-我需要单独离开read_secure_val,因为我在别处使用它。 CAn我使用cookie_val = self.request.cookies.get('content')然后username = cookie_val.split('|')[0]?我刚刚尝试过,并且出现错误,提示“NoneType没有方法拆分” – 2012-08-01 19:12:34

+0

该错误意味着您的'self.request.cookies.get('content')'调用正在返回'None'。我只是在猜测,但如果你是从解释器窗口尝试这个,而不是通过普通用户访问它(通过网络浏览器),它可能会返回None。如果该调用确实返回'14 | b670fedff24f182e52a1ceacf7790e02',那么拆分方法将起作用。你将在'username'中存储'14'。 – mach 2012-08-01 19:17:52

+0

我在Chrome中的本地主机上运行它。我检查,以确保cookie存在,但我仍然得到NoneType对象没有方法拆分 – 2012-08-01 19:28:17

1

read_secure_cookie 是BlogHandler类的实例方法,这意味着它需要该对象作为参数。

通过扩展,并在MainPage类增加功能,你继承了实例方法,并且可以在同一个访问它们是在Python中的所有实例方法,你需要添加关键字self

username = self.read_secure_cookie('content')

要回答你的第二个问题,给出一个字符串的内容myStr = '14|b670fedff24f182e52a1ceacf7790e02'分裂,必须先找到你希望在拆分字符的最简单的方法: ind = string.find('|') ,然后将其分为两个部分:

first = myStr[:ind] end = myStr[ind:]