Tugqi Biz
  • Home
  • Categories
  • Tags
  • Archives

正确使用django signal

当我学会使用Django signal时无比兴奋,正如大多数django开发者

新的开发人员得知django signal后会无比兴奋,很喜欢使用它.只要是能用它的地方就会用它,无意中身处坑底.为什么说是个坑呢?

问题¶

错误的用法: 大量使用django signal;
用signal处理大的进程;

导致: django项目越来越复杂; 项目效率越来越低;

原因¶

新鸟很容易认为signal是异步的.   其实django signal是同步的.

django signal的正确用法¶

  1. 尽量避免使用django signal(能用其他方法处理就用其他方法处理,如下)
    1. post_save和pre_save的逻辑可以考虑放在Model的save里
    2. 不要在pre_save里做数据验证.可以去自定义ModelForm的clean();也可以自己写一个validator
    3. 有些复杂的操作你可以用ModelManager来处理
  2. 给它异步的功能(如,与celery一起使用) 有些情况下不得不使用signal,如下:
    1. signal的receiver需要同事操作多个Model
    2. 清除cache时
    3. 无法使用其他方法替代signal时

  • « 开发环境的备份,同步
  • 使用django celery »

Published

Apr 26, 2015

Category

IT

Tags

  • Django 23
  • Signal 1
  • Powered by Pelican. Theme: Elegant by Talha Mansoor