Python,在__init__中获取self.request.get()的值

时间:2014-03-22 13:44:50

标签: python google-app-engine webapp2

我想在每次创建类的实例时获取self.request.get('foo')和etal的值,因此我决定使用__init__构造函数。这是我的代码:

class archive(handler):
    d = dict(title='',author= '')

    def __init__(self):
        self.d['title'] = self.request.get('title')
        self.d['author'] = self.request.get('author')

class compose(handler):
    def get(self):
        self.render('compose.html')

    def post(self):
        a = archive()

我的目的是,摆脱重复:

title = self.request.get('title')
author = self.request.get('author')
每个def post(self)中的

。但问题是我收到NoneType错误:

AttributeError: 'NoneType' object has no attribute 'get'

显然,self.request.get('title')返回None。我是Python和Google Appengine的新手。

谢谢你们。

2 个答案:

答案 0 :(得分:1)

这就是我设法解决问题的方法:

class Archive(object):
    d = dict(title='',author= '')

    def load_d(self):
        r = webapp2.get_request()

        self.d['title'] = r.get('title')
        self.d['author'] = r.get('author')

class Compose(Handler):
    def get(self):
        self.render('compose.html')

    def post(self):
        a = Archive()
        a.load_d()

答案 1 :(得分:0)

我假设你使用webapp2。

您的init会覆盖webapp2请求处理程序的init(超级)。您可以在webapp2文档中阅读如何:

http://webapp-improved.appspot.com/guide/handlers.html#overriding-init

使用变量(self.variable)时要小心,因为您还可以覆盖请求处理程序的变量。您可以使用请求注册表。