|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 4870
|
[Django] Dubbi su l'utilizzo multidatabase
Ciao ragazzi,
sto valutando l'ipotesi di utilizzare django per un progetto abbastanza grande che devo sviluppare, per ora mi sono letto parecchia documentazione e mi sembra un ottimo framework, peró ho solo un dubbio, e vorrei togliermelo prima di mettermi seriamente a progettare/programmare il sito. La piattaforma che devo sviluppare è multidominio e si adatta in base al dominio di accesso, e ogni dominio ha i suoi dati. Pensavo di fare cosi: fare un database, dove mettere i domini in una tabella, nella stessa tabella mettere user, password, host e tipo di database, del relativo database del sito, quindi fare una prima query per vedere quale base di dati deve utilizzare la piattaforma e poi.. connettermi al database "effettivo" Quindi ricapitolando. L'utente mette l'indirizzo nel browser, l'utente viene reindirizzato sulla nostra piattaforma, da li come è entrato il sistema vede da che dominio proviene, fa una query al db ed estrae i dati di connessione per il database effettivo, si connette e disegna il sito con i dati del dominio selezionato. Django puó farlo? Il dubbio mi è venuto perchè il settings.py mi sembra abbastanza "statico" non vorrei sbattermi per una cosa che o non si puó fare o che mi ci vuole un'enormitá di codice per farla, non vorrei che l'ORM si rifiutasse di collaborare Grazie H2K |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
ho utilizzato django per un progettino personale, è davvero un ottimo framework.
Ma pensando al tuo quesito non saprei proprio dirti sinceramente, intanto mi iscrivo, se non viene in tuo aiuto qualcuno di più ferrato di me faccio qualche prova io e ti so dire..
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 4870
|
grazie mille, nel frattempo anche io cerco una soluzione.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 4870
|
Quote:
Diciamo che avró N clienti, e ogni cliente avrá il suo database, non li voglio unire per questioni di quantitá di dati e di privacy... metti caso che scrivo una query sbagliata non voglio che un utente possa accedere ai dati di altre persone per sbaglio o per altri motivi. Ogni cliente avrá quindi il suo DB, tutti i db avranno la stessa struttura. In pratica devo riuscire a cambiare la connessione una volta che il cliente fa il login e reindirizzarla al database del cliente specifico, ovviamente in maniera totalmente trasparente. H2K |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
ah bhè, così direi che la storia è ben diversa.
Secondo me, se hai queste esigenze così specifiche ti conviene prendere in considerazione un framework più flessibile da questo punto di vista
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 4870
|
Fatto!
Ce l'ho fatta!
Scrivo come, magari puó tornare comodo a qualcuno. Ho impostato nel settings.py due database (per ora ho fatto le prove sono sqlite3 peró non vedo perchè non dovrebbe funzionare anche con gli altri tipi di db) ho creato 2 models.py con le strutture del db in 2 applicazioni differenti. 1. Databaseclienti (db di default) 2. DBClientSingolo ho seguito la guida ufficiale sul multidb in Django e ho creato un DBRouter (la guida è abbastanza criptica in questo senso, ho dovuto faticare un po') ho generato entrambi i db con syncdb e ho riempito il primo con alcuni clienti e con le indicazioni sul db di ogni cliente. Il secondo l'ho lasciato vuoto, ho clonato il secondo db in piu copie e l'ho riempito con i dati del cliente specifico. Nel settings.py quindi come ho giá detto inzialmente chiamo 2 db il primo è pieno di dati e l'altro è un db vuoto, al login faccio la query (con l'ORM di Django) e mi vado a prendere i dati del db specifico del client, con i dati caricati sovrascrivo i dati del secondo db Codice:
from django.conf import settings settings.DATABASES['DBClientSingolo']['NAME']=dati.database.name query che si scrive specificando il db in questo modo: Codice:
Anagrafe.objects.using('DBClientSingolo').all()
Non so se è il metodo piu pulito per fare quello di cui ho bisogno peró è l'unico che ho trovato fin'ora, vi tengo aggiornati nel caso di sviluppi. Grazie per l'aiuto H2K |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
ottimo lavoro! E grazie per la condivisione
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 1136
|
Penso si possa approcciare al problema anche in modo differente, cioè utilizzando i permessi a livello esculsivamente del db: ogni utente può fare query solo dove ha i permessi. Potrebbe essere comodo a tal proposito creare uno schema all'interno di uno stesso db per ciascun utente. So che si può fare con Posgresql. Che db usi?
Django, o chi per esso, non si dovrebbe più preoccupare della questione. |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: Roma
Messaggi: 4870
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:00.




















