2010-07-11 16 views
9

Sono consapevole che posso "archiviarlo ovunque nel mio percorso Python" e tutto, ma qual è un modello organizzato che posso usare per memorizzare classi di middleware per il mio progetto?Django: qual è il posto più ideale per archiviare il middleware specifico del progetto?

sto aggiungendo la mia cartella principale del progetto e la directory del progetto al percorso SYS attraverso mod_wsgi:

sys.path.append('/srv/') 
sys.path.append('/srv/workarounds/') 

Quest'ultima linea è la radice del progetto. Ad esempio, diciamo che voglio applicare questa classe middleware: http://djangosnippets.org/snippets/1179/

Dovrei semplicemente copiare il contenuto dello snippet in un file middleware.py e scaricarlo nella root del progetto? Crea una directory per il middleware, aggiungi quella directory al mio percorso python?

risposta

5

mio solito il layout di un sito Django è:

projects/ 
templates/ 
common/ 
local/ 

Dove:

  • progetti contiene il progetto principale e tutti gli altri
  • comune contiene cose che si può condividere tra i siti, o sono almeno non specifico del progetto, come se fosse necessario scaricare django-profile e django-registration piuttosto che averlo direttamente in python/site-packages
  • i modelli contengono solo quello
  • local contiene elementi specifici del computer corrente, in modo da poter disporre di dati correttamente separati, come la posizione del database e la password, quindi collegare in modo soft le versioni specifiche della macchina (ad esempio "machine1 -localconfig.py ") per locali/localconfig.py e quindi può 'importare localconfig' in settings.py

io generalmente messo middleware che c'è dentro un progetto specifico per il progetto, e middleware che non è in comune specifica per il progetto/middleware/

Assicurarsi di aggiungere la directory dei modelli al posto giusto nelle impostazioni (o molto probabilmente, localconfig.py e quindi importarla nelle impostazioni), e ma Assicuratevi di aggiungere i progetti, le directory comuni e locali al vostro PYTHONPATH.

4

Se si dispone solo di un paio di classi middleware strettamente accoppiate, inserirle in un modulo middleware.py sotto la radice dell'app. (Questo è il modo in cui le app django.contrib eseguono l'operazione: vedere il middleware delle app delle sessioni here).

Se si dispone di molte classi di middleware diverse, creare un pacakge di middleware con sottomoduli delle classi di middleware correlate. Tuttavia, se finisci in questa situazione, considera come puoi rifattorizzare il tuo progetto in diverse mini-app che risolvono tutte le esigenze specifiche (e le apri :)).

Personalmente, ho un pacchetto django comune in cui scarico il middleware comune (come la classe LoginRequiredMiddleware collegata) in un pacchetto middleware. Se questo ha senso nel contesto del tuo progetto, lo consiglio vivamente. Ha salvato le mie innumerevoli ore di duplicazione e correzione dei bug. django-common e django-annoying sono buoni esempi di questo tipo di layout di progetto

Problemi correlati