Changes between Initial Version and Version 1 of DeveloperGuidelines/de


Ignore:
Timestamp:
01/28/09 23:29:59 (13 years ago)
Author:
Fran Boon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DeveloperGuidelines/de

    v1 v1  
     1== Python ==
     2 -  Langsamer Einstieg
     3  - http://openbookproject.net/thinkcs/python/english2e/
     4 - Schneller Einstieg
     5  - http://diveintopython.org/
     6 - Sehr schneller Einstieg!
     7  - Auf die Einrückung kommt es an (benutze 4 Leerzeichen statt Tabs)
     8  - OOP (Objektorientierte Programmierung) - alles ist ein Objekt
     9
     10== Web2Py ==
     11 * http://mdp.cti.depaul.edu/examples/static/cookbook.pdf
     12 * http://mdp.cti.depaul.edu/examples/static/web2py_cheatsheet.pdf
     13
     14Dies ist eine MVC (Model-View-Controler = Modell-Sicht-Steuerung) Umgebung (wie Rails).
     15
     16=== Modell (Model) ===
     17Definiert Datenbanken in: {{{/models/module.py}}}   (equivalent zu {{{inst/mysql-dbcreate.sql}}})
     18
     19Die Modelle werden in der web2py Verarbeitung zuerst geladen, vor der Steuerung.
     20Also kann man hier globale Module importieren/globale Variablen setzen.
     21Die 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: {{{_db.py}}}, {{{_gis.py}}}
     22
     23=== Steuerung (Controller) ===
     24Python Funktionen in {{{/controllers/module.py}}}
     25
     26z.B.
     27{{{
     28   def list_records():
     29       list=t2.itemize(table)
     30       return dict (list=list)
     31}}}   
     32
     33=== Sicht (View) ===
     34HTML/Javascript Vorlagen in {{{/views/module/function.html}}}
     35 * das sind normale HTML/JS Dateien mit der Fähigkeit Python Code einzubinden (z.B. Variablen), der in geschweiften Klammern steht: {{ interpreted python here }}
     36 * Für jede Funktion im Modul sollte es eine .html Datei geben (Name normalerweise der selbe wie die Funktion)
     37 * diese erben normalerweise von {{{views/layout.html}}} was auch Javascript von {{{views/web2py_ajax_t2.html}}} einschließt
     38 * Wenn keine Sicht definiert wurde, wird eine Standardsicht angezeigt, die alle sichtbaren Daten anzeigt, allerdings nicht besonders schön formatiert
     39
     40CSS/Javascript Dateien befinden sich in {{{/static}}}      (equivalent zu {{{www/res}}})
     41
     42== T2 ==
     43Dieses Plugin wird verwendet für [wiki:DeveloperGuidelinesAuthenticationAccess AAA] und vereinfachtes [wiki:DeveloperGuidelinesCreateReadUpdateDelete CRUD] (einschließlich Konflikterkennung)
     44 * http://mdp.cti.depaul.edu/examples/static/t2.pdf
     45Wir erweitern die T2 Klasse in {{{modules/sahana.py}}}
     46
     47=== Konflikterkennung ===
     48Sahana ist ein Mehrbenutzer-System, deshalb besteht die Möglichkeit, dass mehrere Benutzer gleichzeitig denselben Datensatz bearbeiten.
     49
     50Füge dieses Feld in jede zu schützende Tabelle ein (in {{{models/db.py}}}):
     51{{{
     52SQLField('modified_on','datetime'), # Used by T2 to do edit conflict-detection
     53}}}
     54
     55Dieses Feld wird auch verwendet bei der [wiki:DeveloperGuidelinesDatabaseSynchronization Datenbanksynchronisation]
     56
     57== Sahana3 Framework ==
     58Dies sind die Dinge die wir zusätzlich zu Web2Py verwenden, um das Sahana Look & Feel zu erreichen:
     59
     60Seitliche Navigationsleiste anordnen, indem folgendes in jeden Controller eingefügt wird:
     61{{{
     62module='module'
     63# Aktuelles Modul (für Seitenleisten-Titel)
     64module_name=db(db.module.name==module).select()[0].name_nice
     65# Modulliste (aus der das Hauptmenü aufgebaut wird)
     66modules=db(db.module.enabled=='Yes').select(db.module.ALL,orderby=db.module.menu_priority)
     67# Optionsliste (aus der das Modulmenü aufgebaut wird)
     68options=db(db['%s_menu_option' % module].enabled=='Yes').select(db['%s_menu_option' % module].ALL,orderby=db['%s_menu_option' % module].priority)
     69}}}
     70
     71Jede Funktion muß folgende Werte an die Sicht zurückgeben:
     72  return dict(module_name=module_name,modules=modules,options=options)
     73
     74
     75List output can be made more functional by adding this to your table definitions in models/db.py:
     76   {{{db.table.represent=lambda table: A(table.display_field,_href=t2.action('display_table',table.id))}}}
     77
     78Form labels can be set in a translatable manner using:
     79   {{{db.table.field.label=T("label")}}}
     80
     81Form field can be made to use a TEXTAREA by marking the field as being type 'text':
     82   {{{SQLField('field','text'),}}}
     83
     84Form 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 [wiki:DeveloperGuidelinesDatabaseSynchronization Database Synchronization], but displaying a more user-friendly field (such as 'name'):
     85{{{
     86SQLField('field',length=64),
     87
     88db.table.field.requires=IS_NULL_OR(IS_IN_DB(db,'othertable.uuid','othertable.name'))
     89}}}
     90
     91Form field being required can be marked using:
     92   {{{db.table.field.comment=SPAN("*",_class="req")}}}
     93
     94Help for a form field can be set using:
     95   {{{A(SPAN("[Help]"),_class="popupLink",_id="tooltip",_title=T("Help Title|This is what this field is for."))}}}
     96
     97=== Feldoptionen ===
     98Sahana2 verwendet eine allgemeine 'field_options' Tabelle for Feldoptionen.
     99
     100Sahana3 verwendet separate Tabellen für jede Nachschlageliste.
     101
     102
     103== Ein neues Modul hinzufügen ==
     104DeveloperGuidelinesNewModule
     105
     106----
     107
     108DeveloperGuidelinesTips
     109
     110----
     111
     112=== Translations of this page ===
     113
     114 * [wiki:DeveloperGuidelines English]