So, hier die 2 wichtigsten Codes:
Modell:
Code: Alles auswählen
if request.env.web2py_runtime_gae:
db = DAL('gae')
session.connect(request, response, db = db)
else:
db = DAL('sqlite://storage.sqlite')
#CRUD importieren, Authentifizierung festlegen
from gluon.tools import *
auth = Auth(globals(), db)
auth.define_tables()
crud = Crud(globals(), db)
if auth.is_logged_in():
user_id = auth.user.id
else:
user_id = None
# CRUD und Log In Definition beendet
#### Definition der Datenbanken ####
#neuen Termin eintragen
db.define_table( 'termin',
Field('titel', requires = IS_NOT_EMPTY(IS_NOT_IN_DB(db, 'termin.titel'))),
Field('datum', 'date', requires = IS_NULL_OR(IS_DATE())),
Field('zeit', 'time', requires = IS_NULL_OR(IS_TIME())),
Field('erstellt', 'datetime', default=request.now),
Field('autor', requires = db.auth_user, default=user_id),
Field('beschreibung', 'text')
)
# Termin eintragen ENDE
# Möglichkeit, einen Termin zu kommentieren
db.define_table('kommentieren',
Field('termin_id', db.termin),
Field('body', 'text'),
Field('erstellt', 'datetime', default = request.now),
Field('autor', db.auth_user, default = user_id))
# Termin kommentieren ENDE
# Dokumentdaten
db.define_table('dokument',
Field('termin_id', db.termin),
Field('name'),
Field('datei', 'upload'),
Field('erstellt', 'datetime', default = request.now),
Field('autor', db.auth_user, default = user_id))
# Dolumentation ENDE
# Definitionen, welche Informationen angezeigt werden sollen, oder nicht
db.termin.beschreibung.requires= IS_NOT_EMPTY()
db.termin.erstellt.readable = False
db.termin.erstellt.writable = False
db.termin.autor.readable = False
db.termin.autor.writable = False
db.kommentieren.termin_id.requires = IS_IN_DB(db, 'termin.id', '%(titel)s')
db.kommentieren.body.requires = IS_NOT_EMPTY()
db.kommentieren.termin_id.readable = False
db.kommentieren.termin_id.writable = False
db.kommentieren.erstellt.readable = False
db.kommentieren.erstellt.writable = False
db.kommentieren.autor.readable = False
db.kommentieren.autor.writable = False
db.dokument.termin_id.requires = IS_IN_DB(db, 'termin.id', '%(titel)s')
db.dokument.name.requires = [IS_NOT_EMPTY(), IS_NOT_IN_DB(db, 'dokument.name')]
db.dokument.termin_id.readable = False
db.dokument.termin_id.writable = False
db.dokument.erstellt.readable = False
db.dokument.erstellt.writable = False
db.dokument.autor.readable = False
db.dokument.autor.writable = False
# ENDE Definitionen, welche Informationen angezeigt werden sollen, oder nicht
Und der Controller:
Code: Alles auswählen
import datetime
@auth.requires_login()
def index():
"""
>>>index().has_key('termine')
"""
## Neuen Termin erstellen/eintragen
form = crud.create(db.termin, next = URL(r = request, f = 'index'))
return dict(form = form)
@auth.requires_login()
def list():
## Listet alle eingetragenen Termine auf
termine = db().select(db.termin.id, db.termin.titel, db.termin.datum, orderby = db.termin.datum)
return dict (termine = termine)
def show():
## Zeigt einen eingetragenen Termin und seine Details
thistermin = db.termin[request.args(0)]
if not thistermin:
redirect (URL (r = request, f= 'index'))
db.kommentieren.termin_id.default = thistermin.id
if user_id:
form = crud.create(db.kommentieren)
else:
form = None
terminkommentare = db(db.kommentieren.termin_id == thistermin.id).select()
return dict (termin = thistermin, kommentare = terminkommentare, form = form)
@auth.requires_login()
def edit():
## Termin verändern
thistermin = db.termin[request.args(0)]
if not thistermin:
redirect (URL (r = request, f = 'index'))
form = crud.update(db.termin, thistermin, next = URL(r = request, f= 'show', args = request.args))
return dict (form = form)
@auth.requires_login()
def docs():
## Listet alle angehefteten Dokumente eines Termins auf
thistermin = db.termin[request.args(0)]
if not thistermin:
redirect(URL (r = request, f = 'index'))
db.dokument.termin_id.default = thistermin.id
form = crud.create(db.dokument)
termindokumente = db(db.dokument.termin_id == thistermin.id).select()
return dict (termin = thistermin, dokumente = termindokumente, form = form)
def user():
## Benutzerauthentifizierung
return dict(form=auth())
def download():
## Ermöglicht das Downloaden der terminbedingten Dateien
return response.download(request,db)
def search():
## Datenbank nach bestimmten Terminen durchsuchen
return dict (form = FORM (INPUT (_id = 'keyword', _name = 'keyword',
_onkeyup = "ajax ('bg_find', ['keyword'], 'target');")),
target_div = DIV (_id = 'target'))
def bg_find():
## Listet die gefundenen Termine auf, mit Hilfe von XML
pattern = '%' + request.vars.keyword.lower() + '%'
termine = db(db.termin.titel.lower().like(pattern))\
.select (orderby = db.termin.titel)
items = [A(row.titel, _href=URL (r = request, f = show, args = row.id))
\
for row in termine]
return UL (*items).xml()
def next():
## Es wird nur der Termin angezeigt, der noch kommt. Vergangene Termine werden ausgeschlossen
alarm = db(db.termin.datum >= datetime.datetime.today()).select(db.termin.id, db.termin.titel, db.termin.datum, orderby = db.termin.datum)
return dict (alarm = alarm)
Wie pack ich jetzt mein oben genanntes Problem am besten an?