2012-04-09 4 views
5

Sono abbastanza nuovo per django e mi sono trasferito da Drupal.Esiste un linguaggio django per memorizzare le variabili relative alle app nel DB?

In Drupal è possibile definire variabili a livello di modulo (leggere "applicazione" per django) che sono memorizzate nel DB e utilizzare una delle "tabelle principali" di Drupal. L'idioma sarebbe qualcosa di simile:

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

L'idea è che non avrebbe senso avere ogni modulo (app) per creare un'istanza di un intero "tavolo modulo" per memorizzare un solo valore, in modo che il nucleo fornisce uno comune da condividere tra i moduli.

Al meglio della mia newbie comprensione dei Django Django manca una tale funzionalità, ma - in quanto si tratta di un modello comune - ho pensato di girare a SO comunità per verifica se v'è uno standard/modo tipico/idiomatica che gli sviluppatori di Django usano per risolvere questo problema.

(BTW: il valore non è una costante che potrei inserire in un file di impostazioni. È un valore che deve essere aggiornato quotidianamente e deve essere letto ad ogni richiesta).

risposta

6

ci sono applicazioni per raggiungere questo obiettivo, ma mi piacerebbe consigliare django-modeldict da Disqus, come la sua breve

ModelDict è un modo molto efficiente per memorizzare le cose come le impostazioni nel database. L'intero modello viene trasformato in un dizionario (pigramente) e memorizzato nella cache. È invalidato solo quando deve essere (sia in elaborazione che in base a CACHE_BACKEND).

+0

Ho cercato qualcosa di simile a questo per un po '- questa sembra una buona implementazione. Tre applausi per Disqus. –

+0

Grazie, sembra adattarsi perfettamente al conto. :) – mac

2

I dati non statici sono memorizzati in un modello. Se hai bisogno di condividere dati o funzioni tra app, ho visto la convenzione di creare un'app condivisa, qualcosa come "comune". Ciò ospiterà modelli condivisi o funzioni di utilità.

Nei progetti di django ho visto che i dati sono solitamente specifici. I dati che stai memorizzando dovrebbero essere in un modello rappresentativo di quei dati, preferirei avere un modello/oggetto esplicito che rappresenta i miei dati, quindi un oggetto generico che ospita dati molto diversi.

Se si definiscono solo 1 o 2 variabili modificate quotidianamente, forse solo un archivio di chiavi/valori come memcached potrebbe funzionare per voi?

0

Un altro +1 per ModelDict. Un altro potenziale, soluzione simile è Django Costanza:

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

E 'lo scopo di memorizzare i parametri di configurazione delle applicazioni nel database e ha il vantaggio che espone un bel back-end per modificarli per gli amministratori (con i permessi giusti), gestisce i valori di default e ha anche la cache ecc

EDIT: 'Pythonic modo'

Nel caso in cui non è chiaro dalla documentazione (che non è), è possibile impostare le impostazioni lo stesso della Cioè per impostare un ambiente ad un valore, si fa

dalla costanza import config

config.variable_name = value

Problemi correlati