python - 使用 App Engine 创建模型类时如何需要 key_name?

标签 python google-app-engine web-applications

我想要求我的模型类之一将我自己的自定义键指定为 key_name,这样我就可以始终依赖它的存在。我怎么能要求这个呢?例如,我可能有一个模型类,例如:

class Account(db.Model):
    user = db.UserProperty(required=True)
    email = db.EmailProperty()

我想要求 key_name 始终被指定,需要以如下方式实例化:

    user_obj = users.get_current_user()
    new_user = Account(user=user_obj, key_name=user.user_id())
    new_user.put()

如何做到这一点?提前致谢

最佳答案

您可以通过一个简单的工厂函数来使 Account 模型的所有实例化(也许将类本身命名为 _Account ,以向项目中的其他编码人员阐明该类本身就是私有(private)的):

def make_account(key_name=None, **k):
    if key_name is None:
        raise ValueError('Must specify key_name for account!')
    return _Account(key_name=key_name, **k)

您可以变得更复杂,并在类 Account 中的 classmethod 中执行此操作(通过一些检查覆盖后者的 __init__ ,以使其不可能意外地从其他地方调用),&c,但这是核心思想:“在应用程序级代码中执行它”。

关于python - 使用 App Engine 创建模型类时如何需要 key_name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3673721/

相关文章:

python - Django - 如何遍历字典列表以连接来自同一元素的值

python - scikit 混淆矩阵中标量变量的索引无效

python - Google App Engine 上 .py 和 .app 脚本的区别

python - 在python中处理大文本文件

maven - com.google.api.server.spi.auth.EspAuthenticator 未找到

google-app-engine - NDB 是否仍使用 default=None 或属性设置为 None 进行索引?

c# - GoogleWebAuthorizationBroker.AuthorizeAsync 登台服务器失败

api - RESTful API 的效率

asp.net - 通过 AJAX 加载 Web 应用程序内容

python - Numpy,为什么 `x += y` 产生的结果与 `x = x + y` 不同?