2006年06月29日

接触 django 越多,越感到 django 的开发团队是完美主义者,因为他们自已都这么说。这一点特别表现在对国际化处理和 django 内部的一些变化中。最近有人又再次提出统一 django 内部数据的编码格式为 unicode。这的确不是一个新的想法了。hugo 很早就创建了一个 wiki 页面用来搜集与unicode相关的内容,怕有遗漏的地方,但是对于我来说,这的确是非常困难的一件事情。因为 django 是一个框架,它要处理方方面面的东西,如请求端(浏览器)的数据编码,后台数据库的编码。象mysql它支持多国编码,因此如果想在目前很好的处理中文,需要将mysql的服务器和客户端的编码格式统统设为utf-8才行。当然utf-8编码在django中是可以改变的,它是一个DEFAULT_CHARSET的配置项。不过能统一真是一个诱人的亮点。正如i18n在 django 中的完美支持一样,不仅在程序中,在模板中也可以。这一点许多web framework都很难做到。

从邮件列表的讨论中来看,django团队的绝大多数人都支持unicode编码的统一,希望它能够成为1.0版本发布时的一个特性。看一看他们的发言就知道了:

Adrian Holovaty:

We are, after all, perfectionists.

Not only do we want to show even more love toward the international
community, I just like the idea of passing Unicode strings everywhere.
It seems so clean.

hugo:

I whole-heartedly agree! It’s just much cleaner and actually the
current way to handle stuff _is_ problematic, like already pointed out.
The constant need to juggle from bytestrings to unicode strings for
some stuff – or the decision to ignore the problems of applying regular
expressions to utf-8 bytestrings for example – is neither perfectionist
nor DRY :)

更多的完美主义者的表现还在于DRY思想的体现,如许多的shortcuts方法的应用,generic-view, generic-field, ysncdb,等等等等。甚至于他们不急于在0.91后正式推出0.95版本,还需要一些 django 的爱好者使用svn去与仓库同步。

对于Unicode编码的统一工作,django 小组的Simon Willison还说:

If we’re going to add unicode support it really should happen before
1.0. One point that’s worth considering is how much of a marketing
coup out-of-the-box unicode would be, especially in comparison to
Ruby and Rails, neither of which are very good at this stuff.

邮件讨论地址

这是昨天的事了。多用户认证已经合并到主干去了。已经有一篇 blog 记录了这件事:阅读

从变化上讲主要有以下几点:

  1. 增加认证和登录的处理

    from django.contrib.auth import authenticate, login
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)

    从上面可以看出,authenticate用来实现用户认证的处理,如果成功返回认证通过的User对象。如果失败返回一个None。login则用来设置用户已经登录的状态。如果你自已需要实现认证的处理,那么如上处理就会非常方便。以前老的方法有些麻烦,先要自已去数据库中查询,然后需要导入SESSION_KEY,再在session中进行设置。现在提供了这两个方法就方便多了。

  2. 增加了多后台认证的功能

    如果需要使用首先要在 settings.py 中设置:AUTHENTICATION_BACKENDS,它需要是一个tuple,缺省为 (‘django.contrib.auth.backends.ModelBackend’,)。查看django/contrib/auth/backends.py只提供了一个ModelBackend的类,也就是django缺省支持的数据库的方式。目前还没有其它的,可能要增加如其它的方式需要按ModelBackend的方式创建新的类。django会按照AUTHENTICATION_BACKENDS中列出的认证类的顺序进行处理。因此如果有同名的用户和口令,当处理到第一个就返回了,后面的就没有机会处理了。

    如果要自已写认证类,那么只需要按ModelBackend的样子定义两个方法即可。

    同时文档上还说,如果你要使用Admin功能的话,因为Admin要使用内置的认证方式,因此建议,你自已的认证类在认证成功的同时,再向User表中创建用户对象,以供Admin来使用。并且附有一个例子。

有人在 django 的邮件列表中说是做一个 django 的 T-shirt,挺有趣的。这不有一个样子:

这个龙挺有意思。因为 django 的发音与英语的“龙”有些象。

2006年06月19日

有人问到 django 是否适合作网站游戏,在能力上是否有所何证。 Adrian 列举了一个使用 django 做的游戏网站:

My Dark Secret

上面看了看,好象是一个现在挺流行的“杀人”游戏。有意思。

这个问题好象很简单,最简单的就是:

from myproj.apps.WhatApp import WhatModel

一般的例子也是这么写的。这里需要注意的是,我们可能把myproj的父目录设置到PythonPath中去了,因此,可以从myproj的父目录开始引用一个包,因此上面没有问题。

如果有人问,如果我不想使用myproj怎么办呢?因为这样与myproj目录关联太死了。我想的一个办法是,将myproj设置到PythonPath中去,这样上面的引用改为:

from apps.WhatApp import WhatModel

这样完全没有project目录了。

今天在 django 的邮件列表又看到一个方法,可能更好:

from django.db.models.loading import get_app
desired_app = get_app(‘desired_app’)
from desired_app.models import SomeModel

这是使用 django 提供的 get_app 的方法来实现的。因此这样就不需要考虑目录结构,完全是一种逻辑上的关系了。这种方法不错。当然除了 get_app 之外,如果是为了导入 model 还可以有其它的方法来更方便导入,如:

from django.db.models.loading import get_model
SomeModel = get_model(app_label, model_label)

2006年06月14日

今天看到python.org的邮件列表发布了一封关于最近的Python开发说明(4/16–4/30),其中有不少变化和有意思的地方,记录一下(捡主要的):

  1. 将setuptools作为标准库
  2. 把作为包标识的__init__.py从子目录中去掉,但顶层目录还是需要的。如果真这样的话,有些软件改动会很大。这一需求是Guido一起共事的googler提的。
  3. python和Visual Studio 2005 Express。据说微软的vs 2005可能会免费,因此Guido问Python是否可以适应它。不过大家认为2.5版有些早,也许2.6版可以。而且微软还有可能不会提供vs 2003的支持了,因此转向也可能是必须的。
  4. PEP3101提出了一种新的字符串格式化处理。通过string.format()方法来实现。这样即可以使用位置参数(0,1,2)也可以使用关键字参数,举例为:

    "The story of {0}, {1}, and {c}".format(a, b, c=d)
    "Today is: {0:%x}".format(datetime.now())
  5. 还有其它一些事情,不作记录。自已看吧。
2006年06月09日

从共创开源得知此消息。此次比赛为第二届,参赛过程基本上不变,但有所区别。特别分为9大赛区。如果你有好的开源作品,注意是开源作品,不妨参加一下。具体情况参见组委会网站。奖品不错。

文档是很重要的,如果有一定的用户基础就更好了。

2006年06月07日

地址在这里

这是第一篇,以后还有。总体来说是一篇入门文章,但从安装到相关的配置很详细还是不错。而且看到后来还会写关于TurboGears的文章,并且有相关的比较,这个倒是值得一看。

另外在Django的邮件列表中,看到作者Ian Maurer还发了一封邮件向大家征求意见。结果Adrian说现在在magic-removal之后,Model中需要使用__str__而不能使用__repr__了。这是一个需要注意的。

还有其它人提出了一些问题。都是小问题。

现在在digg.com上有不少的评论,可以看一看。地址