Python 数据存储。虽然数据存储中存在对象属性,但未找到该属性
当代码检查用户是否可以执行操作时,找不到ndb.BooleanProperty(default=False)属性 我尝试过使用ndb.StringProperty而不是Boolean属性,但没有什么区别。物业内的其他属性已识别。 最有趣的是,如果我在HTML的jinja2中放置{{user.org_setup_done}}标记,它将正确返回属性值,即False 换句话说,我知道该属性已正确创建并存储在用户实体中,因为我可以在数据存储中看到它,并在HTML中使用jinja2标记调用它。但是,当我对其执行检查时,未找到它Python 数据存储。虽然数据存储中存在对象属性,但未找到该属性,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,当代码检查用户是否可以执行操作时,找不到ndb.BooleanProperty(default=False)属性 我尝试过使用ndb.StringProperty而不是Boolean属性,但没有什么区别。物业内的其他属性已识别。 最有趣的是,如果我在HTML的jinja2中放置{{user.org_setup_done}}标记,它将正确返回属性值,即False 换句话说,我知道该属性已正确创建并存储在用户实体中,因为我可以在数据存储中看到它,并在HTML中使用jinja2标记调用它。但是,当我对
class User(ndb.Model):
"""
model for storing user information
"""
email = ndb.StringProperty(required=True) # the users email, as username
pass_hash = ndb.StringProperty(required=True) # the users hashed password
org_setup_done = ndb.BooleanProperty(default=False) # if the user has completed the org profile for creating events
class OrgCreateCompStartHandler(BaseHandler):
"""handler that lets you start creating an event by choosing series, date, name, start time and venue"""
def get(self):
try:
user = self.user_obj() # get the user object from session, returns None if no session exists
if user.org_setup_done: # check to see if the user is org_ready. If yes, continue with the event creation,
# if no then redirect to the profile page for event organisers.
# : TEMPLATE VALUES
template_values = {
'user': user,
}
# : RENDER TEMPLATE
self.render_template(ROUTE, 'org-create.html', template_values)
else:
self.redirect("/")
except Exception, e:
logging.error("ERROR is %s" % e)
logging.exception("EXC is %s" % e)
self.redirect("/oops") # unexpected error
在代码检查org\u setup\u done属性是否为True之后,org-create.html页面应该呈现预期结果
实际结果是以下错误:
Traceback (most recent call last):
File "C:\Users\events.py", line 2433, in get
if user.org_setup_done:
AttributeError: 'User' object has no attribute 'org_setup_done'
有人知道这件事吗?我真的被这个弄糊涂了
user = self.user_obj() # get the user object from session, returns None if no session exists
我认为您的User
模型与webapp2
您可以配置webapp2以使用用户
模型
webapp_app = webapp2.WSGIApplication(
config={
...
'webapp2_extras.auth': {'user_model': 'path.to.my.user_model_file.User'},
})
但是webapp2
的会话代码可能对User
对象具有哪些字段/函数有一些假设,因此您需要在User
中实现这些字段/函数。
您还可以让您的用户模型继承webapp2模型
from webapp2_extras.appengine.auth.models import User as _webapp2_User
class User(_webapp2_User):
...
根据@Alex的说法,webapp2的内置用户模型和我创建的用户模型之间似乎存在冲突 虽然我也不确定问题是否在webapp2的会话代码和我以管理员身份登录时创建的会话代码之间
i、 e.由于该网站尚未上线,因此它在app.yaml文件中以管理员身份登录谷歌。一旦我登录到dev服务器,webapp2就会创建一个会话cookie。然后,当我为站点创建一个新用户时,会创建另一个会话cookie,这次是通过dispatch中的BaseHandler创建的。我对代码的了解不足以知道冲突是否确实存在于这两个会话cookie中,但可能是这样。在添加
org\u setup\u done
属性或将其默认值添加到模型中之前,您是否创建了任何用户对象?@DanCornilescu谢谢。我已经删除了以前创建的用户,并刷新了memchache以确保这不是问题所在。我将属性的名称更改为完全任意的名称,将其改为字符串而不是布尔值,并删除了默认值,改为硬编码“False”。我仍然有相同的错误消息。找到其他属性,即电子邮件,如果呈现org-create.html模板,则{{user.email}}正确返回值,而{{user.arbital value}未找到。我已经看了将近2天了,不知道如何解决这个问题!谢谢,虽然我不确定。我在以前的一个简单项目中使用了一个名为User的模型,没有类似的问题。我将尝试更改模型名称(尽管会导致实时版本出现问题),看看它是否有效。干杯。发生了冲突,我将用户模型名称更改为Users,它按预期工作。