我尝试自定义django_comments
应用(github repo,docs)。
默认get_form_target()
返回django_comments.views.post_comment
,这是一个基于函数的视图。反过来,post_comment()
会将HttpRedirectResponse
返回到值next
(如果已指定)或默认确认页面。
请参阅默认的post_comment()实现here。
我需要在post_comment()
添加几行逻辑。我可以将它覆盖到它仍然执行默认实现的位置,但是使用额外的逻辑吗?我可以复制原始代码并对其进行修改,但只需添加几行自定义逻辑就会感觉很多代码重复。
答案 0 :(得分:0)
这取决于您的逻辑相对于当前post_comment()
中发生的事情发生的位置。如果你只想在 post_comment()
之前做一些,那么只需复制一个指向现有func的指针,创建你的func,然后在最后调用原文。最后,您可以通过将函数分配给其他模块的post_comment()
来进行MonkeyPatch。
OTOH,如果您想要做的是改变当前func中内部正在发生的事情,那么您可能必须复制代码,然后如上所述进行MonkeyPatch。
请注意:即使有好的评论警告人们这是做什么的,MonkeyPatching代表一个维护定时炸弹,等待将来在一些不方便的时候出现。