wiki:DeveloperGuidelines/de

Version 3 (modified by Fran Boon, 13 years ago) ( diff )

00_db.py

Python

Web2Py

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 von views/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.

Ein neues Modul hinzufügen

DeveloperGuidelinesNewModule


DeveloperGuidelinesTips


Translations of this page

Note: See TracWiki for help on using the wiki.