Soggetto: dabo-users Un semplice tutorial per bizObjects traduco letteralmente OggettoLavoro?
Autore: johnf indirizzo e-mail: jfabiani@yolo.com Inviato: 2007.12.10 at 13:34:27

Puoi trovare l'intero argomento qui :>>>> http://leafe.com/archives/full_thread/371799

Questo tutorial va inteso come una semplice conversazione tra gli utenti o fans di Dabo. Prego consultare le Dabo wiki per maggiori informazioni ed altri tutorials.

Dico che questo non e' ne' un tutorial su Python ,ne'un tutorial di installationi di Databases, o sull'uso di SQL. Presumo che voi conosciate la sintassi sia di Python che di SQL. Seguite le istruzioni di installazione del vs DB preferito. Da parte mia mi sforzero' per non usare termini avanzati ed assicuro che il codice sara' facile da leggere anche per il profano.

OK Cominciamo con cose semplici. L'obiettivo di Dabo è fornire un facile modo per creare un'applicazione da scrivania (desktop application) e la maggiorparte di desktop applications richiede dati persistenti.Dabo supporta diversi database. SQLite, MySQL, MS-SQL, FireBird?, il mio e' preferito Postgres. Tuttavia, Dabo non fornisce attaualmente interfacce per accedere ai motori database. Lo sviluppatore deve scaricare e installare l'interfaccia per Python o per il DB che preferisce. Controllate qui http://dabodev.com/wiki/FrontPage per le istruzioni o dove trovare i file necessari. Per esempio se state usando Postgres vi occorrono psycopg2. Le wiki forniscono il link http://initd.org/tracker/psycopg/wiki/PsycopgTwo dove troverete i file necessari. E' altamente reccomandato che facciate un test per verificare la connessione al DB e riceviate alcuni dati. Questo è un ottimo modo per lavorare e penso che vi aspettiate che in questo modo lavori Dabo.

Conosco alcuni lettori che pensano che il loro preferito DB sia il migliore. Non sono d'accordo con questa idea. Postgres è solamente quello che ha avuto maggior successo, ed e' il database che usero' in questo tutorial. Per contro , ogni cosa che sarà mostrata qua, potra' essere applicata a ciascuno dei DB supportati. In questa forma Dabo DB da un supporto agnostico. Ma resta assurdo che Dabo possa supportare i vs favoriti DB.

Dabo ha una struttura su 3 liveli.
1)The User Interface , 2)The Business Rules, 3) The Database.
che posso tradurre: 1)Interfaccia Utente, 2)Regole d'affari, 3) Il DataBase?
Noi lavoreremo con "bizObjects" .
Che cosa e' bizObject" vi chiederete? C e' un'ottima spiegazione sulle FAQ wiki a questo indirizzo: http://dabodev.com/wiki/FAQs#Bizobj.
In termini semplici dico: e' il codice che mi permette di creare, salvare e cancellare dati usando la mia UI.
L' "bizObject" si occupa di validare e comprendere i miei dati ( puo' essere inteso anche come business rules?).Un concetto semplice ma potentissimo. Per avere il supporto di bizObject, abbiamo bisogno di poche cose:
1)una connessione al database, 2)una descrizione della tabella, 3)e alcune regole da rispettare.

La Connessione:

Ogni interfaccia Python che Dabo usa sono supposte in accordo con DB-API 2.0. Si comprende che questo sia un modo standars per accedere al database. Ecco il link http://www.python.org/dev/peps/pep-0249/ se volete controllare.Se avete letto qui c'e' una sezione sulla "connessione" e vi potete rendere conto di cio' che e' passato per la connessione che ha parametri non definiti. (Questi parametri) dependono da cio' che richiede il motore del DB. Cosi' Dabo ha bisogno di voi affinche' forniate questi parametri prima che avvenga la connessione al vs DB

Il modo piu semplice e facile per avviare una connessione e' usare l'applicazione "CxnEditor.py". Lavora benissimo ed è il migliore esempio di come Dabo fa mangiare il proprio cane (CxnEditor e' stato creato usando Dabo). Io lo uso per i miei progetti e se c'e' un modo migliore l'avrei usato. Ma non e' cosi' (ogni reale lavoro e' fatto nella struttura). CxnEditor crea un file XML che contiene i parameters necessari per l'interfaccia di connessione Python da applicare al vs DB. Come: user name, password, host,database name o qualunque altra cosa che consenta la connessione. (L'applicazione) si rende conto che avete bisogno della connessione prima che iniziate a chiedere dati al database. Ma quando lo fa voi spingete il codice, e che cosa fa il codice, guardate come.

Quando scrivete il codice per un form create qualcosa di simile a quanto segue:

class MainForm(dabo.ui.dForm):
        def afterInit(self):
                #place some UI code here
                self.layout()
if __name__ == "__main__":
        app = dabo.dApp()
        app.BasePrefKey = "fileTutor"
        app.setAppInfo("appName", "File Tutorial ")
        app.MainFormClass = MainForm
        app.start()
E in una "class MainForm?" (il nostro punto di ingresso) dovete aggiungere un metodo "createBizobjs". Questo e' il punto dove dovrete aggiungere le istruzioni per la vs. connessione e aggiungerete la descrizione di bizObjects. Per cominciare aggiungiamo le informazioni di connessione come segue:

#questo metodo use il cnxml file creato da CxnEditor

def createBizobjs(self):
        self.Application.addConnectFile("FileName.cnxml")
                # FileName = il nome creato con il CxnEditor.py
                # Questa chiamata attualmente creera' la  connessione if non ancora fatta.
                # Se è avvenuta, restituisce l' esistente connessione, in questo modo
                # si evita la connessione multipla
        self.connection = self.Application.getConnectionByName("connectionName")
Non permette la confusione dei due nomi "FileName?.cnxml" e "connectionName". La "connectionName" e' il nome della connessione all'interno del file "FileName?.cnxml". E' possibile che ci sia piu' di un nome di "connection name" all'interno dello stesso file ma cio' e' al di fuori di questo tutorial. Cosi' "self.connection" e' l'attuale connessione e noi provvederemo al nostro bizObjects.

Ricordate che realmente noi consentiamo al nostro programma di parlare con il DB. Allorquando Dabo necessita di comunicare con il database usa l'oggeto "self.connection".

Per tanto se avete bisogno di conoscere come creare un "self.connection" senza usare il CxnEditor, ecco come fare :

 
from dConnectInfo import dConnectInfo
connInterface = dConnectInfo(DbType="Postgres")
connInterface.Host = "192.168.1.201"
connInterface.Database = "DatabaseName"
connInterface.User = "john"
connInterface.PlainTextPassword = "passWord"

self.connection = dConnection(connInterface).getConnection()
se il vs DB ha bisogno di ulteriori dati come l'indirizzo di una porta, aggiungete la riga
connInterface.Port = "5432".
Ma se volete seguire un mio consiglio usate il CxnEditor. E' facile e lavora bene. Ci sono alcuni speciali casi dove il file cnxml non si adatta alle vs necessità. it.

Il nostro codice assomiglia:

 
class MainForm(dabo.ui.dForm):
        def afterInit(self):
                #place some UI code here
                self.layout()
        def createBizobjs(self):
                self.Application.addConnectFile("FileName.cnxml")
                # FileName = the name created with the CxnEditor.py
                # This call will actually create the connection if it hasn't already
                # been made. If it has, it returns the existing connection, so that
                # multiple connections aren't used up.
                self.connection = self.Application.getConnectionByName("connectionName")
if __name__ == "__main__":
        app = dabo.dApp()
        app.BasePrefKey = "bizObjTutor"
        app.setAppInfo("appName", "bizObject Tutorial ")
        app.MainFormClass = MainForm
        app.start()
Fin ora non abbiamo detto molto.Solamente che noi abbiamo bisogno di una connessione al DB e bizObject la usa per comunicare con il DB. Ma senza questa informazione non accade nulla e la più potente caratteristica di Dabo resta inutilizzata.

La volta seguente sarà fornito un piccolo form con una UI e noi costruiremo il primo bizObject. Questo vs lavoro vi assicurerà di poter utilizzare il vs favorito DB che funzioni perfettamente sotto Python

John Fabiani

_______________________________________________ Post Messages to: Dabo-users leafe.com Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users Searchable Archives: http://leafe.com/archives/search/dabo-users This message: http://leafe.com/archives/byMID/dabo-users/200712101034.27347.jfabiani yolo.com ©2007 johnf