我正在尝试检索使用 Datastore 存储的一些 OAuth 信息,但是在实例化 OAuthConsumer 类时出现此错误:
TypeError: __init__() got an unexpected keyword argument 'consumer_secret'
这也是我第一次尝试 Namespace,我想知道这是否与它有关。类如下:
creds = OAuthConsumer('google')
class OAuthConsumer(db.Model):
'''the oauth consumer information'''
consumer_key = db.StringProperty()
consumer_secret = db.StringProperty()
def __init__(self, service):
namespace_manager.set_namespace(service)
query = db.GqlQuery('SELECT * FROM OAuthConsumer')
creds = query.get()
self.consumer_key = creds.consumer_key
self.consumer_secret = creds.consumer_secret
这是我使用数据查看器的结果:
关于我做错了什么的任何想法?
最佳答案
您正在覆盖 __init__
方法,并且您没有将关键字参数传递给父构造函数(或根本不调用它!)。
作为一般规则,您不应覆盖数据存储模型类的构造函数。有可能做对,但很棘手,而且提供类方法作为工厂要安全得多,如下所示:
class OAuthConsumer(db.Model):
'''the oauth consumer information'''
consumer_key = db.StringProperty()
consumer_secret = db.StringProperty()
@classmethod
def new(cls, service):
namespace_manager.set_namespace(service)
query = db.GqlQuery('SELECT * FROM OAuthConsumer')
creds = query.get()
return cls(consumer_key=creds.consumer_key, consumer_secret=creds.consumer_secret)
creds = OAuthConsumer('google')
但是,由于以下几个原因,您的代码有点奇怪:
关于python - 使用 GAE 数据存储和命名空间时出现类型错误 - 无法检索实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751199/