7

我对 django 很陌生,并从 Drupal 转移到它。

在 Drupal 中,可以定义存储在数据库中的模块级变量(读取 django 的“应用程序”)并使用 Drupal 的“核心表”之一。成语是这样的:

variable_set('mymodule_variablename', $value);
variable_get('mymodule_variablename', $default_value);
variable_del('mymodule_variablename');

这个想法是让每个模块(应用程序)实例化整个“模块表”以仅存储一个值是没有意义的,因此核心提供了一个通用的跨模块共享的值。

就我对 django 的新手而言,django 缺乏这样的功能,但是——因为它是一种常见的模式——我想求助于 SO 社区来检查 django 开发人员是否有一种典型/标准/惯用的方式来解决这个问题

(顺便说一句:该值不是我可以放入设置文件的常量。它是一个应该每天刷新的值,并且应该在每次请求时读取)。

4

3 回答 3

6

有一些应用程序可以实现这一点,但我想从 disqus 推荐django-modeldict,作为它的简介

ModelDict 是一种在数据库中存储诸如设置之类的东西的非常有效的方法。整个模型被转换为字典(惰性)并存储在您的缓存中。它仅在需要时才失效(无论是在进程中还是基于 CACHE_BACKEND)。

于 2012-04-09T14:38:39.790 回答
2

非静态数据存储在模型中。如果您需要在应用程序之间共享数据或功能,我已经看到了制作共享应用程序的约定,例如“通用”。这将容纳共享模型或实用程序功能。

在我见过的 django 项目中,数据通常是特定的。您存储的数据应该在代表该数据的模型中,我宁愿有一个表示我的数据的显式模型/对象,然后是一个包含截然不同数据的通用对象。

如果您只定义 1 或 2 个每天更改的变量,也许只有像 memcached 这样的键/值存储对您有用?

于 2012-04-09T14:28:05.973 回答
2

ModelDict 的另一个 +1。另一个潜在的类似解决方案是 Django Constance:

https://github.com/jazzband/django-constance

它旨在将应用程序配置参数存储在数据库中,并具有以下优点:它公开了一个很好的后端来为管理员编辑它们(具有正确的权限),处理默认值并且还具有缓存等。

编辑:

如果文档中不清楚(它不是),您可以设置与“Pythonic 方式”相同的设置。即设置一个值,你做

从康斯坦斯导入配置

config.variable_name = 值

于 2016-08-30T00:23:29.070 回答