Python
- Langsamer Einstieg
- Schneller Einstieg
- Sehr schneller Einstieg!
- Auf die Einrückung kommt es an (benutze 4 Leerzeichen statt Tabs)
- OOP (Objektorientierte Programmierung) - alles ist ein Objekt
Web2Py
- http://mdp.cti.depaul.edu/examples/static/cookbook.pdf
- http://mdp.cti.depaul.edu/examples/static/web2py_cheatsheet.pdf
Dies ist eine MVC (Model-View-Controler = Modell-Sicht-Steuerung) Umgebung (wie Rails).
Modell (Model)
Definiert Datenbanken in: /models/module.py
(equivalent zu inst/mysql-dbcreate.sql
)
Die Modelle werden in der web2py Verarbeitung zuerst geladen, vor der Steuerung.
Also kann man hier globale Module importieren/globale Variablen setzen.
Die Modelle werden in alphabetischer Reihenfolge importiert, also müssen die Dateien, von denen andere Module abhängen, zuerst geladen werden. Deshalb werden sie mit Unterstrich beginnend benannt: 00_db.py
, 01_RESTlike_controller.py
, 02_pr.py
, 03_gis.py
Steuerung (Controller)
Python Funktionen in /controllers/module.py
z.B.
def list_records(): list=t2.itemize(table) return dict (list=list)
Sicht (View)
HTML/Javascript Vorlagen in /views/module/function.html
- das sind normale HTML/JS Dateien mit der Fähigkeit Python Code einzubinden (z.B. Variablen), der in geschweiften Klammern steht: {{ interpreted python here }}
- Für jede Funktion im Modul sollte es eine .html Datei geben (Name normalerweise der selbe wie die Funktion)
- diese erben normalerweise von
views/layout.html
was auch Javascript vonviews/web2py_ajax_t2.html
einschließt - Wenn keine Sicht definiert wurde, wird eine Standardsicht angezeigt, die alle sichtbaren Daten anzeigt, allerdings nicht besonders schön formatiert
CSS/Javascript Dateien befinden sich in /static
(equivalent zu www/res
)
T2
Dieses Plugin wird verwendet für AAA und vereinfachtes CRUD (einschließlich Konflikterkennung)
Wir erweitern die T2 Klasse in modules/sahana.py
Konflikterkennung
Sahana ist ein Mehrbenutzer-System, deshalb besteht die Möglichkeit, dass mehrere Benutzer gleichzeitig denselben Datensatz bearbeiten.
Füge dieses Feld in jede zu schützende Tabelle ein (in models/db.py
):
SQLField('modified_on','datetime'), # Used by T2 to do edit conflict-detection
Dieses Feld wird auch verwendet bei der Datenbanksynchronisation
Sahana3 Framework
Dies sind die Dinge die wir zusätzlich zu Web2Py verwenden, um das Sahana Look & Feel zu erreichen:
Seitliche Navigationsleiste anordnen, indem folgendes in jeden Controller eingefügt wird:
module='module' # Aktuelles Modul (für Seitenleisten-Titel) module_name=db(db.module.name==module).select()[0].name_nice # Modulliste (aus der das Hauptmenü aufgebaut wird) modules=db(db.module.enabled=='Yes').select(db.module.ALL,orderby=db.module.menu_priority) # Optionsliste (aus der das Modulmenü aufgebaut wird) options=db(db['%s_menu_option' % module].enabled=='Yes').select(db['%s_menu_option' % module].ALL,orderby=db['%s_menu_option' % module].priority)
Jede Funktion muß folgende Werte an die Sicht zurückgeben:
return dict(module_name=module_name,modules=modules,options=options)
List output can be made more functional by adding this to your table definitions in models/db.py:
db.table.represent=lambda table: A(table.display_field,_href=t2.action('display_table',table.id))
Form labels can be set in a translatable manner using:
db.table.field.label=T("label")
Form field can be made to use a TEXTAREA by marking the field as being type 'text':
SQLField('field','text'),
Form field can be made to use a SELECT dropdown by setting the field as a lookup to another table...linked to the 'uuid' field to allow Database Synchronization, but displaying a more user-friendly field (such as 'name'):
SQLField('field',length=64), db.table.field.requires=IS_NULL_OR(IS_IN_DB(db,'othertable.uuid','othertable.name'))
Form field being required can be marked using:
db.table.field.comment=SPAN("*",_class="req")
Help for a form field can be set using:
A(SPAN("[Help]"),_class="popupLink",_id="tooltip",_title=T("Help Title|This is what this field is for."))
Feldoptionen
Sahana2 verwendet eine allgemeine 'field_options' Tabelle for Feldoptionen.
Sahana3 verwendet separate Tabellen für jede Nachschlageliste.