bottle - regulärer Ausdruck

Django, Flask, Bottle, WSGI, CGI…
Antworten
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

Hallo,

gegeben ist eine Route mit einem regulären Ausdruck

Code: Alles auswählen

@get('/search/cas/<cas:re:\d{2,7}-\d{2}-\d>')
def search_cas(cas):
    return cas
Wenn der Ausdruck gematch wird, läuft der Script weiter - korrekt. Andernfalls tritt ein Fehler 404 auf, vermutlich auch korrekt. Nur wie kann man in die Fehlerbearbeitung eingreifen? Bspw. in dem eine Flash Meldung erzeugt (gibt es glaube ich ein bottle Plugin) und diese über ein Redirect auf der Ausgangsseite anzeigt.

Grüße
Uwe
BlackJack

@wagneru: Das würde ich nicht über die Route machen sondern dort für `cas` erst einmal alles annehmen und dann in der Funktion prüfen und entsprechend reagieren.
wagneru
User
Beiträge: 29
Registriert: Freitag 3. Januar 2014, 13:55
Wohnort: Groß-Gerau

@BlackJack

Ja, wäre eine Möglichkeit. Gefunden habe ich nur einen Error decorator, mit dem man Fehler pauschal abfangen kann. Für 404 bspw.:

Code: Alles auswählen

@error(404)
def custom404(error):
    return 'Uups ein Fehler'
Leider benötige ich einen Route spezifischen Handler :(
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das geht prinzipiell nicht. Das Routing System schaut sich alle Routen an und schaut welche passt, wenn keine passt wird eine 404 Antwort erzeugt. Wenn du jetzt für jede Route eine Funktion ausgeführt würde, wenn die Route nicht zutrifft müsste das Framework irgendwie entscheiden welche dieser Funktionen es aufruft oder ob es Ergebnisse wegwirft. Außerdem müsstest du innerhalb dieser Funktionen auch wieder schauen ob sie zuständig ist.

Du solltest in der Route so restriktiv sein wie notwendig damit ein Pfad einer Route eindeutig zuzuordnen ist. Erst innerhalb des Views, solltest du dann die Werte validieren um zu schauen ob sie wirklich korrekt sind und ggf. auf Fehler reagieren.
Antworten