Seite 1 von 1

Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 11:05
von Deeet88
Hallo,
ich habe bei Web2Py in meinem Controller folgende Funktion:

Code: Alles auswählen

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)
Der Code kreiert mir ein Formular, durch das ich einen Termin in meine Datenbank eintragen kann.
Nun möchte ich aber darauf achten, dass eine Fehlermeldung erscheint, wenn sich ein neuer Termin
mit einem anderen zeitlic überschneidet. Man soll also an einem 2 Tag keine 2 Termine haben können.

Meine Termintabelle sieht so aus:

Code: Alles auswählen

db.define_table( 'termin',
    Field('iduser', requires = db.auth_user, default = user_id),
    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')
    )
Ich habe noch nie wirklich mit Exceptions gearbeitet - bin ziemlicher Neuling... Hoffe, ihr könnt mir helfen! :)

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 12:01
von noisefloor
Hallo,

eine Exception zu erzeugen ist einfach, das machst du z.B. mit

Code: Alles auswählen

raise TypeError
wenn du einen TypeError erzeugen willst.

Nur: Willst du wirklich eine Exception werfen? In der Regel wird das Programm dann auch abgebrochen. Und: du musst ja so wie so erst mal feststellen, ob Termine sich überschneiden, damit du überhaupt eine Exception auslösen kannst.

Von daher musst du dir erst mal eine Funktion schreiben, die _vor_ dem eigentlich Schreibvorgang in die DB prüft, ob es eine Terminkollision gibt. Oder die baust die deine DB-Struktur so um, dass die DB einen Fehler wirft. Wobei letzteres vielleicht schwieriger ist...

Gruß, noisefloor

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 12:39
von Deeet88
ja ich dachte mir irgendwiesowas:

Code: Alles auswählen

if request.vars.datum == db.termin.datum:
     ##und dann weiß ich nicht mehr weiter... :(##

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 15:17
von noisefloor
Hallo,

na ja, entweder wirfst du eine Exception - was in diesem Fall nicht so geschickt ist - oder du gibt eine Meldung an den Nutzer zurück, dass es einen Konflikt gibt. Wie auch immer die Ausgabe bei web2py realisiert wird.

Gruß, noisefloor

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 17:35
von Deeet88
letzteres find ich ne gute idee. hat jemand ne idee, wie ich das realisieren könnte?

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 18:29
von /me
Deeet88 hat geschrieben:letzteres find ich ne gute idee. hat jemand ne idee, wie ich das realisieren könnte?
Wie jede andere Erzeugung einer Webseite sonst auch in web2py (wie auch immer das da geht). Da du mit web2py arbeitest müsstest du ja wissen, wie dort eine Anfrage mit einer Auslieferung einer Webseite beantwortet wird. Falls nicht: http://web2py.com/book

Re: Web2Py Exception

Verfasst: Mittwoch 8. Juni 2011, 19:01
von deets
@Deeet88

Das Problem ist zerlegbar in zwei Teile: Validierungsfehler bzw. Warnung an den Benutzer sollten hinreichend mit web2py-Beispielen "versorgt" sein.

Dein zweites Problem ist die Terminueberschneidung, und da steckt die Kunst drin. Dein gezeigtes Snippet ist da definitiv nicht ausreichen. Schalte dich doch mal mit mutetella kurz, der hier im Forum auch immer wieder um Hilfe bittet bezueglich seines Kalender-Programmes. Vielleicht koennt ihr ja einfach dasselbe datenmodell benutzen. Oder du liest dir mal wenigstens die Diskussionen mit ihm dazu durch.