2012-06-04 12 views
9

Sono in procinto di imparare Django e Python (oltre alla programmazione in generale). Per semplicità, sto usando sqlite3 come database mentre sto esaminando le esercitazioni per Django e così via.Posso creare il percorso del database Django (per sqlite3) "multipiattaforma"?

Sono un utente multipiattaforma (Mac OS, Windows, Linux) a seconda di dove mi trovo in quel momento. Quindi, quello che ho fatto è mettere i miei progetti di programmazione nel mio Dropbox così da poter lavorare sullo stesso codice da qualsiasi luogo.

Il problema è che, nel file settings.py per un particolare progetto, a specificare il percorso del database in questo modo:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3',        # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'C:/Users/David/Dropbox/programming/mysite/database',  # Or path to database file if using sqlite3. 

... ma quando sto usando MacOS o Linux, ovviamente la C:/soffoca. Mi stavo chiedendo se qualcuno avesse suggerito un rimedio semplice a questo. Ovviamente, un modo che potrei fare sarebbe impostare il mio database da remoto sul mio server web tramite MySQL o qualcosa del genere, ma ho pensato che potrebbe esserci un modo semplice per farlo, come con un'istruzione "if".

+0

OT: posso chiederti come riesci a lavorare su crossplatform? hai installato Python specifico per OS su ogni macchina che hai usato? hai impostato una virtualizzazione su ogni macchina? grazie – Bakaburg

risposta

0

Non una grande soluzione, ma si può solo verificare quale piattaforma si sta eseguendo su, come:

import platform 
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>' 
+0

Cheers! Apprezzo l'aiuto. –

22

Utilizzando relative paths in settings.py è un terreno comunale abbastanza per essere considerato una best practice da molti. Qualcosa del genere può aiutare.

from os.path import dirname, join 

PROJECT_DIR = dirname(__file__) 

DATABASES = { 
    # ... 
    'NAME': join(PROJECT_DIR, 'your_db_name.db'), 
    # ... 
} 
+0

Mille grazie. :) –

2

Uso entrambi i metodi sopra indicati, se del caso. I percorsi relativi sono presenti in tutti i miei progetti, ma alcuni hanno richiesto il rilevamento della piattaforma.

Un terzo metodo consiste nell'importare un file local_settings al di fuori del controllo di versione nel file delle impostazioni principale. from local_settings import * - questo file delle impostazioni locali può essere diverso per ogni ambiente. Se vuoi essere elegante, puoi inserire un tipo di rilevamento dell'ambiente adatto a te e importare il file appropriato di windows, osx o linux.

Questo metodo è pulito e probabilmente preferibile se si dispone di tre ambienti in quanto non ingombrerà il settings.py con tutte le impostazioni dell'ambiente.

Django Local Settings

ho personalmente file di impostazioni ancora più granulari per ogni ambiente, come un file per le scelte di database (a volte, voglio un db sqlite vuoto per ripristinare facilmente), consentendo S3, la barra degli strumenti di debug, lo sviluppo locale (template debug, thumbnail debug etc), caching on/off in modo da poter combinare qualsiasi cosa di cui ho bisogno per produzione, staging, vari livelli di debugging di staging e sviluppo locale.

+0

La risposta accettata a quella domanda a cui ti sei collegato è azzeccata e anche una best practice: racchiudi il comando 'from local_settings import *' in un try catch. http://stackoverflow.com/a/4909964/169121 – istruble

+0

Apprezzo molto l'aiuto :) –

Problemi correlati