Django 1.3新特性

阵子出去度假了,回来发现Django 1.3终于发布了。这次发布包含了少量新功能和大量的bugfix,具体的下文会说明。这次升级对Python版本的最低要求提高至2.4,另外这将是最后一个支持2.4的Django版本了,各位有能力有需求的同志请果断更新。

1.3带来了什么?

类视图 (Class-based views)

本次更新加入了一个新的框架来支持类视图,这将意味着更高的代码重用率和开发效率。新的Generic View基类在提供了易用性和扩展性的同时,还对原先的函数式generic view提供了完整的模拟支持。

扩展链接:
通用类视图
新旧Generic View迁移指南

日志 Logging

1.3加入了框架级别的对Python原生logging的支持,所以现在可以在Django项目中方便地配置和控制。Django内置了许多logging处理器,特别值得一提的就是之前500错误发送email的行为现在已经是一种logging行为了。

扩展链接:
Django的logging接口

增强的静态文件处理 Extended static files handling

1.3包含了一个新的app django.contrib.staticfiles 来帮助开发者管理渲染页面所需的如js、css这样的静态文件。

在之前,所有的静态文件都是用MEDIA_URLMEDIA_ROOT来控制的。为了和用户上传的文件作区分,staticfiles横空出世,现在你可以将静态文件分配到app目录或任意你指定的目录,分发app时就更为方便了。

扩展链接:
staticfiles的文档

unittest2

Django 1.3从Python 2.7复制了一份unittest2来为低版本Python提供2.7中带来的那些关于unittest的重大功能更新。你只需要使用django.utils.unittest来调用这个库,Django会判断是使用已安装的unittest2还是Django的copy。

事务的上下文管理器 Transaction context managers

Python 2.5以上的用户可以使用新的事务的上下文管理器来处理视图中的事务,例如:

with transaction.autocommit():
    # ...

扩展链接:
事务管理

可控的级联删除 Configurable delete-cascade

ForeignKeyOneToOneField现在可以通过一个on_delete参数来控制删除时的行为。之前,所有的删除都是级联的,现在另外还支持设置空值、设置默认值、设置成任意值、阻止删除和无作为等操作。具体定义请参考on_delete的文档

待翻译字符串的上下文标示和注释 Contextual markers and comments for translatable strings

待翻译字符串现在可以通过pgettext来进行标示,另外,你也可以用特殊记号来给其加上注释。

扩展链接:
上下文标示
注释

增强内建模板标签 Improvements to built-in template tags

  • include标签引入with选项来为导入文件进行传参
  • include标签引入only开关来避免上下文干扰
  • with标签现在可以在一个with块中定义多个变量
  • load标签引入from选项来进行独立的标签或过滤器的导入
译者按: 这些改动可真是实用,另外,从那个include上隐约看到了mako的影子……

TemplateResponse

有时让修饰器或中间件来修改响应是一件很有效的做法,但是在创建完HttpResponse后是很难进修修改的。为了克服这个限制,Django 1.3加入了一个新的TemplateResponse,它能够保留相关的模板和环境变量,只在需要时才生成最终响应。

扩展链接:
相关文档

有关缓存的变动

Django 1.3引入了一些对缓存框架的改进:

  1. 加入多缓存支持
  2. 缓存API中加入了版本控制、缓存前缀和键变幻函数
  3. 现在可以通过HTTP请求头来创建缓存键
  4. 缓存后台加入对pylibmc的支持

其他

还有许多小的改动,就挑些我感兴趣的说说吧。

  • MEDIA_URLSTATIC_URL必须以斜杠结尾
  • 增加RequestFactory供测试用
  • 可以给管理员发送富文本邮件,同时,错误邮件包含了更多debug模式下的页面信息和格式
  • simple_tag()加入一个takes_context参数,可以更方便的创建需要访问模板上下文的标签
  • 提供一个默认包含RequestContextrender()快捷函数
  • 增强F()表达式

好了,写完了,有空再写向后不兼容的部分。发现好久不写blog,手好生……

P.S. 离线文档已更新,可以到django-doc下载了

对“Django 1.3新特性”的4条评论

  1. Avatar

    辛苦了,好材料!

  2. Avatar

    已阅,谢谢!

  3. Avatar

    写的很好!

  4. Avatar

    貌似没写全。。

    其中关于admin里要删除的model如果有filefield字段,删除时,文件不会被删除的问题,我想找个解决方法,最好是能一起删除

    但是看官方更新文档里说,因为有回滚功能,所以让用户自己处理,有点坑爹啊。