2012-04-09 11 views
5

Soy bastante nuevo en django, y me mudé a él desde Drupal.¿Hay un idioma django para almacenar variables relacionadas con la aplicación en el DB?

En Drupal es posible definir variables de nivel de módulo (leer "aplicación" para django) que están almacenadas en la base de datos y usar una de las "tablas centrales" de Drupal. El lenguaje sería algo así como:

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

La idea es que no tendría sentido que cada módulo (app) para crear una instancia en su conjunto "tabla de módulos" para simplemente almacenar un valor, por lo que el núcleo proporciona uno común para ser compartido a través de los módulos.

A lo mejor de mi novato comprensión de Django, Django carecen de una funcionalidad tal, pero - ya que es un patrón común - pensé que recurrir a SO comunidad para verificación si existe un estándar/forma típica/idiomática que los desarrolladores de django usan para resolver este problema.

(Por cierto, el valor no es una constante que podría poner en un archivo de configuración. Es un valor que debe actualizarse diariamente, y debe leerse en cada solicitud).

Respuesta

6

Hay aplicaciones para lograr esto, pero me gustaría recomendar django-modeldict de Disqus, como su breve

ModelDict es una forma muy eficiente de almacenar cosas como ajustes en su base de datos. El modelo completo se transforma en un diccionario (perezosamente) y se almacena en su caché. Solo se invalida cuando tiene que estar (tanto en proceso como en CACHE_BACKEND).

+0

He estado buscando algo similar por un tiempo, parece una buena implementación. Tres hurras para Disqus. –

+0

Gracias, parece encajar a la perfección. :) – mac

2

Los datos que no son estáticos se almacenan en un modelo. Si necesita compartir datos o funciones entre aplicaciones, he visto la convención de crear una aplicación compartida, algo así como 'común'. Esto alojaría modelos compartidos o funciones de utilidad.

En los proyectos de django que he visto los datos suelen ser específicos. Los datos que está almacenando deben estar en un modelo que sea representativo de esos datos, prefiero tener un modelo/objeto explícito que represente mis datos y luego un objeto genérico que contenga datos muy diferentes.

Si solo está definiendo 1 o dos variables que se cambian a diario, ¿quizás un almacén de claves/valores como memcached funcionaría para usted?

0

Otro +1 de ModelDict. Otro potencial, solución similar es Django Constanza:

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

que está destinado a almacenar parámetros de configuración de aplicaciones en la base de datos y tiene la ventaja de que expone un buen backend para editarlos para los administradores (con los permisos adecuados), maneja valores por defecto y también tiene el almacenamiento en caché, etc.

EDIT: 'manera Pythonic'

En caso de que no está claro a partir de la documentación (que no lo es), se puede establecer la configuración de la misma la Es decir. para establecer un ajuste a un valor, lo hace

de configuración de importación de Constanza

config.variable_name = valor

Cuestiones relacionadas