bindiry
V2EX  ›  Django

利用Django-admin来修改网站内容时,如果获得触发事件?

  •  
  •   bindiry · Oct 12, 2011 · 5715 views
    This topic created in 5354 days ago, the information mentioned may be changed or developed.
    比如,我想在Django-Admin里修改一条记录后

    往一个文本文件里记录一下当前记录所在的表的记录数。
    8 replies    1970-01-01 08:00:00 +08:00
    xiaket
        1
    xiaket  
       Oct 12, 2011
    修改model的save方法吧
    bindiry
        2
    bindiry  
    OP
       Oct 12, 2011
    @xiaket 非常感谢,测试通过。
    reorx
        3
    reorx  
       Dec 6, 2011
    @xiaket 这样不大好,而且会使用到super这种奇技淫巧。最正确的处理方式是启用signal。其实它就是所谓的“触发事件”,任何Model的实例执行save后都会发出。

    ref: https://docs.djangoproject.com/en/1.3/topics/signals/
    bindiry
        4
    bindiry  
    OP
       Dec 7, 2011
    @reorx 这么久的帖子都被挖出来,谢谢指教。
    reorx
        5
    reorx  
       Dec 7, 2011
    @bindiry 呵呵,Django节点只有3个帖子,自然一眼就看到了。想起来当时在v2ex上发的第一个帖子也是关于Django的呢。
    xiaket
        6
    xiaket  
       Dec 7, 2011
    @reorx signal我也用过, 个人感觉有点dark magic的味道, 让问题难以追踪. 倒是将这部分逻辑写在model的定义那儿, 一目了然. 我觉得这样更合理一点. 而且要说奇技淫巧, super远没有signal走得远.

    我个人觉得signal更合理的应用方式是用来触发邮件啥的, 类似消息队列的触发等等.
    reorx
        7
    reorx  
       Dec 7, 2011
    @xiaket 赞同,signal确实不怎么好用,而且会让逻辑变得分散而混乱。

    super的用法一直存在争议,见这里:http://fuhm.net/super-harmful/

    所以我想Django设计signal的目的也许是为了避免开发者使用super而造成不可预见的奇怪报错,我自己在override诸如save之类的方法的时候就遇到过。当发现signal之后,下意识地觉得它更安全一些,没有进行严密的考证,见笑,以后仔细研究下两者的优劣之后再来讨论 :)
    lepture
        8
    lepture  
       Dec 7, 2011
    @reorx 不知道現在的版本怎麼樣了,當年signal是有bug的,會重複觸發。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5383 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    ♥ Do have faith in what you're doing.