V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bindiry
V2EX  ›  Django

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

  •  
  •   bindiry · 2011-10-12 22:29:15 +08:00 · 5024 次点击
    这是一个创建于 4782 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如,我想在Django-Admin里修改一条记录后

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

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

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

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

    所以我想Django设计signal的目的也许是为了避免开发者使用super而造成不可预见的奇怪报错,我自己在override诸如save之类的方法的时候就遇到过。当发现signal之后,下意识地觉得它更安全一些,没有进行严密的考证,见笑,以后仔细研究下两者的优劣之后再来讨论 :)
    lepture
        8
    lepture  
       2011-12-07 20:43:57 +08:00
    @reorx 不知道現在的版本怎麼樣了,當年signal是有bug的,會重複觸發。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.