Django_comments:覆盖post_comment()的正确方法是什么?

时间:2016-05-27 17:46:37

标签: python django django-forms django-views django-comments

我尝试自定义django_comments应用(github repodocs)。

默认get_form_target()返回django_comments.views.post_comment,这是一个基于函数的视图。反过来,post_comment()会将HttpRedirectResponse返回到值next(如果已指定)或默认确认页面。

请参阅默认的post_comment()实现here

我需要在post_comment()添加几行逻辑。我可以将它覆盖到它仍然执行默认实现的位置,但是使用额外的逻辑吗?我可以复制原始代码并对其进行修改,但只需添加几行自定义逻辑就会感觉很多代码重复。

1 个答案:

答案 0 :(得分:0)

这取决于您的逻辑相对于当前post_comment()中发生的事情发生的位置。如果你只想在 post_comment()之前做一些,那么只需复制一个指向现有func的指针,创建你的func,然后在最后调用原文。最后,您可以通过将函数分配给其他模块的post_comment()来进行MonkeyPatch。

OTOH,如果您想要做的是改变当前func中内部正在发生的事情,那么您可能必须复制代码,然后如上所述进行MonkeyPatch。

请注意:即使有好的评论警告人们这是做什么的,MonkeyPatching代表一个维护定时炸弹,等待将来在一些不方便的时候出现。