python - 我可以将 Django 模型对象作为单例获取吗?

标签 python django django-models

当我为同一 ID 调用 Models.get() 时,它返回不同的 Python 对象:

print(Book.objects.get(id=1) is Book.objects.get(id=1))
>>> False

我想知道是否可以改变这种行为,也许可以使用一些自定义模型管理器。它可以在内部为所有检索到的对象存储一些注册表,并覆盖 get_queryset() 以使其使用此注册表中的对象(如果已检索到这些对象)。

为什么它会有帮助

我有一个模型ServerCredentials,它存储登录名和密码。我有多个使用相同凭据进行连接的消费者。由于只允许与服务器建立一个连接,因此将临时连接信息(例如身份验证 token )存储为 ServerCredentials 对象的字段(而不是数据库中)会很方便。如果模型对象可以是单例,那么消费者只需使用 ServerCredentials 字段即可轻松共享身份验证 token 。如果没有它,我必须手动创建一些注册表,但我认为它应该在 ModelManager 端完成。

  1. 是否可以在 ModelManager 端的注册表中缓存对象?
  2. 这是个好主意吗?
  3. 有相应的实现吗?

非常感谢!

最佳答案

模型的管理器是其各自类的常规实例,因此您可以实现某种注册表。然而,这个注册表对于每个进程都是唯一的。在生产中,您的应用程序通常由启动多个进程的服务器运行,例如uwsgi(甚至在多台机器上运行)。

如果您想让 transient 数据在整个应用程序中可用,您可以将 Django 的缓存设施与内存存储(如 Memcached 或 Redis)结合使用。

关于python - 我可以将 Django 模型对象作为单例获取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51220853/

相关文章:

python - xgboost.XGBClassifier 中可用的目标函数有哪些不同选项?

Python 在新实例中缓存以前的对象属性

python - 更新多对多关系

python - 具有多个模型(表)的 Django 分页

python - 构造函数 B 未在 A -> B -> C 继承链中调用

python - 如何使用装饰器计算函数调用?

python - 连接到 openstack 失败

python - 使用Django 汇总Report

android - Django REST框架: Directly display on results list in GenericView

django - 日期输入 : how to show placeholder