Python 如何在Google App Engine中使用默认实体初始化数据存储
假设我有一个特殊的模型Python 如何在Google App Engine中使用默认实体初始化数据存储,python,google-app-engine,webapp2,Python,Google App Engine,Webapp2,假设我有一个特殊的模型 class Page(db.Model): """ Model for storing wiki pages """ page_name = db.StringProperty(required=True, default="/") content = db.StringProperty(required=True, default="") created = db.DateTimeProperty(auto_now = True) 我要
class Page(db.Model):
""" Model for storing wiki pages """
page_name = db.StringProperty(required=True, default="/")
content = db.StringProperty(required=True, default="")
created = db.DateTimeProperty(auto_now = True)
我要做的是查询数据存储。如果没有基于此模型的实体,我想创建一个默认实体。或者,用一个默认实体创建模型会更好
我知道Python中的init方法用于设置属性的初始值,但是当我在请求处理程序的Get方法中使用GAE&webapp2时,我得到了一个错误
出现错误的代码是:
class WikiPage(Handler):
def __init__(self):
pass
我看到的错误是:
handler = self.handler(request, response)
TypeError: __init__() takes exactly 1 argument (3 given)
请告知不清楚您想做什么,但如果您只是想消除错误,则需要定义如下的
\uuuuu init\uuuuu
方法:
class WikiPage(Handler):
def __init__(self, *args, **kwargs):
pass
更新以回答您的问题“为什么””:
因为您正在重写继承自
RequestHandler
的处理程序的\uuuu init\uuuuu
方法,如果您在这里查看它的原始定义:您将看到它是如何定义的,在整个框架中也是如何使用它的,这意味着如果您出于任何原因决定重写它,您需要遵循相同的格式。您能解释一下为什么需要这样吗?是的,我确实看到了这个定义,但假设由于其他两个参数都有默认值,所以它们都得到了处理。我会测试并让你知道。和平you@ImranNazir,是的,原始定义有默认值,如果您愿意,也可以定义它们。您正在覆盖(完全替换)原始定义(因为您似乎没有调用super
),因此在那里定义的内容不再扮演任何角色。问题是,其他一些代码(传入请求处理程序)正在将3个参数传递给\uuuuu init\uuuu
方法,但是\uuuuuu init\uuuu
方法的实现只接受一个(self),这就是代码失败的原因。是的,我知道路由可以将参数传递给处理程序。我在get方法中这样使用它们。在本例中,我的路径是:'(PAGE_RE,WikiPage)'其中的'PAGE_RE=r'(/(?:[a-zA-Z0-9_-]+/?)*)''这应该将baseurl之后的所有内容传递到我的处理程序的get方法中。这将是传递的1个参数,而不是您的处理程序从webapp2继承的3个参数。请查看以下webapp2文档: