Django和TDD

Django是一种敏捷的高级开发框架,在敏捷开发框架中Testing是非常重要的 ,在Django的最trunk中,已经加入了完成的Testing功能,这里并不想描述Testing怎么使用,Testing文档已经非常详细了。

在使用Django之前,我对测试还是一头雾水,只是了解一点敏捷开发。但使用Django后,我发现Django是在“强制”你做各种测试。

要开发Django的应用,首先需要定义Model,并且在Modle中定义数据表项,根据Django的设计哲学,在Model中封装所有的领域逻辑,领域逻辑是设计模式的一种,不太懂的google一下。这样的你就可以通过Testing来对你的Model进行测试了。除了对Model进行Testing外,你还可以对newforms进行测试,虽然newforms使用起来并不简单,有时会感觉到大才小用,但通过Testing可以保证你的newforms的正确性,而且可以封装一些业务逻辑,当表单校验成功后,可以执行某一个方法来完成某个业务逻辑。

除了对Models进行测试外,Django还提供Test Client,用于对Http级的内容进行测试,这样连View也一快测试了。

而且,Django现在支持doctests和unit tests,doctest是python的测试框架,非常“pythonic”,呵呵。

总之,不管是有意还是无意的Django都在“强迫”你做TDD,这样能让你的开发更加敏捷。

Django中Signals发送两次问题

在Django中Signals是非常有用的机制,这类似于一些钩子函数,留下让开发者来控制方法的机制。

但在Django中,有非常令人讨厌的问题,就是有些时候Signals会发送两次,这个问题早在django 1.0之前的版本中就有,但是这个问题在django1.0的时候依然存在,不过提供了解决的方法,在connect的时候,会有一个dispatch_uid的参数,如果指定这个参数话,就不会出现上述问题。这个功能是在Signals重构然后被添加的。

http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges#Signalrefactoring