2006年03月06日

今天收到 SPE 的作者 stani 的信,说是联合编辑器项目的网站和 maillist 建立.网站地址在这里.好象是建立在 Stani 自已的网站上.网站使用plone.不过我不太习惯zwiki的语法,已经适应了moinmoin的语法.而Trac与Moin是相同的.

至于项目的名字看意思是叫作:pyxides.不管它,叫什么都无所谓.首页的左上角有许多的小图标,仔细看都是一些编辑器的图标.NewEdit 的蝴蝶也在上面.

先看一看大家的讨论吧.

2006年03月04日

仔细看 django 的代码可以发现许多的好东西.这不本文将讲一个curry的函数.不知道怎么翻译为好.它位于 django/utils/functional.py.函数的定义为:

def curry(*args, **kwargs):
    def _curried(*moreargs, **morekwargs):
        return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
return _curried

它的工作就是一个decorator的方式.它的主要作用是将原函数预置一些参数,然后返回一个新函数.这样新函数只需要传入原来没有预设的参数.这样在某些情况下可以简化一些处理.特别是有时为了通用我们定义了一个函数有许多的参数,但调用者却只使用几个参数进行调用,特别多的是在GUI编程中的事件处理方法中.为了在事件处理中使用这个多参数的函数,使用curry可以解决这个问题.

举例如下:

>>> from django.utils.functional import curry
>>> def a(a, b, c):
…     print a, b, c
>>> b = curry(a, ‘a’, ‘b’)
>>> b(‘c’)
a b c

第一个参数需要是一个函数对象,后面是预设的参数值,可以是tuple参数和关键字参数.

不过它使用起来还是有一定的限制,主要是它的参数处理.从上面的源代码可以看到,它对于tuple参数和字典参数是不能混在一起的.特别是对于tuple参数,它是采用追加的方法,因此预设参数时只能是从前向后,中间不能跳跃.比如你想预设上面的a, c参数,但是做不到,其实还是预设了a,b参数.而对于字典参数却没有关系.

这里要注意的是,所谓字典参数就是指有缺省值的参数.

2006年03月02日

django 最近的变化不可谓不大,这都是托 pycon 的福.许多东西在改进.下面把我了解的一些说一下,等版本正式稳定了,教程都要改了:)

  1. 取消了 django-admin 的 init 命令.我们知道,init是用来初始化数据库的,然后以后通过install来增加app的model所对应的表.现在取消了init命令之后,增加了一个新的叫syncdb的命令.它就更好用了,它会检查所有安装的app(即在settings.py中的INSTALLED_APPS中的配置项),然后创建那些还不存在的表.因此使用它就可以自动创建相关的表.有人还建议在执行时可以装入数据,不过还没有看到这个变化.
  2. 增加了一个新的middleware,需要在settings.py中设置.

    ‘django.contrib.auth.middleware.RequestUserMiddleware’

    这个是用来处理用户认证的.django已经开始可以使用外部的认证方式了.具体如何做我还不清楚.
  3. 增加了事务的处理.这还是我看到的一篇blog说的这事:Django Gets Transactions

还有许多的变化,有些我也不是很清楚.每天 svn 的修改都非常多.