Wenn Sie mit Ihrer Verarbeitung fortfahren möchten, werden Sie keinen Fehler mehr melden wollen. Dies hat je nach Setup eine Reihe von Auswirkungen. In der Regel wird ein Fehler ausgelöst, wenn der Status auf einen anderen Wert als 200 gesetzt wird, was wahrscheinlich nicht der Fall ist. Im Allgemeinen wird die Exception-Protokollierung ausgelöst, die Sie haben (in unserem Fall werden Fehler an die Sentry gesendet). In der Regel werden die Datenbanktransaktionen automatisch zurückgesetzt.
Wenn Sie nur eine Warnung für einen Benutzer anzeigen möchten, weil sie etwas "schlechtes" getan haben, aber die Verarbeitung fortsetzen, werden Sie einen anderen Mechanismus benötigen. Ich habe zwei verschiedene Möglichkeiten, wie ich mit dieser Situation umgehen kann, abhängig vom Kontext. Meistens zeige ich beim nächsten Laden der Seite (nach dem Post, der die Warnung hatte) automatisch eine Nachricht an, indem ich einen Cookie setze und ihn anzeigen lasse. Was für Sie funktioniert, hängt davon ab, wie Ihre App eingerichtet ist. Wenn Ihre Anrufe alle Ajax-Anrufe sind, können Sie ein Objekt haben, um Warnungen und andere Nachrichten, die in Ihren Ajax-Anrufen eingebaut sind, zurückzugeben.
Die andere Sache, die wir tun, ist, dass für einige Seiten, die Stapelbefehle behandeln, wo es viele Warnungen geben könnte, dann haben wir eine spezielle Seite, die lädt, wenn Warnungen, die eine Liste von Warnungen zu handhaben sind.
Hier ist unser Code, der die Warnmeldung in Python setzt und liest. Dies ist in unserer Basis-Controller-Klasse, so dass es in allen Controllern verfügbar ist. Sie könnten auch den Teil in Javascript schreiben:
def flash(self, msg, msg_type="info"):
self.flash_info = (msg, msg_type)
self.set_cookie('flash', base64.b64encode(bytes(json.dumps([msg, msg_type]), 'utf-8')))
def get_flash(self):
msg = None
msg_type = None
if hasattr(self, "flash_info"):
msg, msg_type = self.flash_info
else:
flash_msg = self.get_cookie('flash')
if flash_msg:
msg, msg_type = json.loads(base64.b64decode(flash_msg).decode('utf-8'))
self.clear_cookie('flash')
self.clear_cookie('flash')
return msg, msg_type