2016-05-27 21 views
0

Ich versuche, django_comments App (github repo, docs) anzupassen.Django_comments: Was ist der richtige Weg, post_comment() zu überschreiben?

Der Standardwert get_form_target() gibt django_comments.views.post_comment zurück, eine funktionsbasierte Ansicht. post_comment() wiederum gibt HttpRedirectResponse auf den Wert next (falls angegeben) oder auf eine Standardbestätigungsseite zurück.

Siehe Standard post_comment() Implementierung here.

Ich muss der ein paar Zeilen der Logik hinzufügen. Kann ich es überschreiben, wo es noch die Standardimplementierung tut, aber mit der zusätzlichen Logik? Ich könnte einfach den ursprünglichen Code kopieren und ändern, aber es fühlt sich an wie eine Menge Code-Duplizierung für das Hinzufügen nur ein paar Zeilen von benutzerdefinierter Logik.

Antwort

0

Es hängt davon ab, wo Ihre Logik relativ zu dem passiert, was in der aktuellen passiert. Wenn Sie einfach etwas tun möchten vor , dann kopieren Sie einfach einen Zeiger auf die vorhandene Funktion, erstellen Sie Ihre Funktion, und rufen Sie das Original am Ende. Schließlich können Sie MonkeyPatch einfügen, indem Sie Ihre Funktion post_comment() des anderen Moduls zuweisen.

OTOH, wenn das, was Sie tun möchten, ist zu ändern, was die aktuelle func innerhalb passiert, dann können Sie eine Kopie des Codes vornehmen müssen, dann wie oben MonkeyPatch.

Hinweis gut: sogar mit guten Kommentaren warnen die Leute über das, was dies tut, MonkeyPatching stellt eine Wartungszeitbombe dar, die nur darauf wartet, in einer unbequemen Zeit in der Zukunft loszugehen.

Verwandte Themen