django 0.96版发行说明

欢迎来到Django 0.96!

0.96的主要目标是清理和稳定0.95中引入的功能。有一些小的 backwards-incompatible changes 从0.95开始,但升级过程应该相当简单,不需要对现有应用程序进行重大更改。

但是,我们现在也发布了0.96,因为我们为不久的将来安排了一组向后不兼容的更改。一旦完成,它们将涉及到应用程序开发人员的一些代码更改,因此我们建议您坚持使用Django 0.96,直到下一个正式版本;然后您将能够在一个步骤中进行升级,而无需进行增量更改来跟上Django的开发版本。

向后不兼容的更改

当您从0.95切换到0.96时,以下更改可能需要您更新代码:

MySQLdb 版本要求

由于旧版本的 MySQLdb python模块(django用来连接mysql数据库),django的mysql后端现在需要1.2.1p2或更高版本的 MySQLdb ,并在尝试使用旧版本时引发异常。

如果您当前无法升级的副本 MySQLdb 为了满足这一需求,Django添加了一个单独的、向后兼容的后端,称为“mysql-old”。要使用此后端,请更改 DATABASE_ENGINE 从以下位置设置Django设置文件:

DATABASE_ENGINE = "mysql"

对此:

DATABASE_ENGINE = "mysql_old"

但是,我们强烈建议MySQL用户升级到更新版本的 MySQLdb 尽快提供“mysql-old”后端只是为了缓解这种转换,被认为是不推荐使用的;除了任何必要的安全修复之外,它将不会被积极维护,并且将在以后的django版本中被删除。

另外,请注意一些功能,如 DATABASE_OPTIONS 设置(参见 databases documentation 有关详细信息),仅在“mysql”后端可用,不会提供给“mysql-old”。

数据库约束名称已更改

Django为外键引用生成的约束名的格式略有变化。这些名称通常只在无法将引用直接放在受影响的列上时使用,因此它们并不总是可见的。

这种变化的效果是 manage.py reset 对现有数据库的类似命令可能会使用约束名称的新形式生成SQL,而数据库本身包含旧形式中命名的约束;这将导致数据库服务器发出有关修改不存在约束的错误消息。

如果需要解决此问题,可以使用两种方法:

  1. 重定向的输出 manage.py 到一个文件,并在执行前编辑生成的SQL以使用正确的约束名。

  2. 检查的输出 manage.py sqlall 要查看新样式的约束名称,并将其用作重命名数据库中现有约束的指南。

名称更改 manage.py

一些选择 manage.py 随着夹具支架的增加而改变:

  • 有新的 dumpdataloaddata 如您所料,这些命令将把数据转储到数据库或从数据库中加载数据。这些命令可以对Django支持的任何序列化格式进行操作。

  • 这个 sqlinitialdata 命令已重命名为 sqlcustom 强调这一点 loaddata 应用于数据(和 sqlcustom 对于其他自定义SQL——视图、存储过程等)。

  • 遗迹 install 命令已被删除。使用 syncdb .

反斜杠转义已更改

Django数据库API现在可以摆脱作为查询参数给出的反斜杠。如果您有任何与反斜杠匹配的数据库API代码,并且它以前正在工作(尽管缺少转义),那么您必须将代码更改为“unescape”斜杠的一个级别。

例如,这一点曾经起作用:

# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\\\")

以上内容现在不正确,应改写为:

# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\")

已删除启用psyco设置

这个 ENABLE_PSYCO 设置不再存在。如果设置文件包括 ENABLE_PSYCO 它没有效果;使用 Psyco, 我们建议编写一个中间件类来激活它。

0.96有什么新功能?

这个版本代表了超过一千个源提交和超过四百个错误修复,所以我们不可能编目所有的更改。在这里,我们描述了这个版本中最显著的变化。

新建表单库

django.newforms 是Django的新表单处理库。它代替了 django.forms ,旧的表单/操纵器/验证框架。这两个API在0.96版本中都可用,但在接下来的两个版本中,我们计划完全切换到新的表单系统,并取消对旧系统的预测和删除。

这种转变有三个要素:

  • 我们复制了当前 django.formsdjango.oldforms . 这允许您升级代码 now 而不是等待向后不兼容的更改,并在事实发生后急于修复代码。只需像这样更改导入语句:

    from django import forms  # 0.95-style
    from django import oldforms as forms  # 0.96-style
    
  • Django的下一个官方版本将移动当前 django.newformsdjango.forms . 这将是一个向后不兼容的更改,任何仍在使用旧版本的 django.forms 届时需要按照上述说明更改其进口声明。

  • 之后的下一个版本将完全删除 django.oldforms .

虽然 newforms 类库将继续发展,它已经为最常见的情况做好了准备。我们建议任何新表单处理的人跳过旧表单系统并从新表单开始。

有关的详细信息 django.newforms ,阅读 newforms documentation .

URLCONF改进

您现在可以在urlconfs中使用任何可调用文件作为回调(以前,只允许使用引用可调用文件的字符串)。这样就可以更自然地使用urlconfs。例如,此urlconf::

from django.conf.urls.defaults import *

urlpatterns = patterns("", ("^myview/$", "mysite.myapp.views.myview"))

现在可以重写为:

from django.conf.urls.defaults import *
from mysite.myapp.views import myview

urlpatterns = patterns("", ("^myview/$", myview))

使用decorator时可以看到一个有用的应用程序;这个更改允许您将decorator应用于视图 在你的生活中 . 因此,您可以使通用视图非常容易地要求登录:

from django.conf.urls.defaults import *
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list
from mysite.myapp.models import MyModel

info = {
    "queryset": MyModel.objects.all(),
}

urlpatterns = patterns("", ("^myview/$", login_required(object_list), info))

请注意,两种语法(字符串和可调用文件)都是有效的,并且在可预见的将来仍然有效。

测试框架

Django现在包含了一个测试框架,这样你就可以开始将恐惧转化为无聊(向KentBeck道歉)。您可以根据 doctestunittest 并使用一个简单的测试客户机测试您的视图。

还有对“fixtures”的新支持——初始数据,存储在任何支持的 serialization formats ,将在测试开始时加载到数据库中。这使得用真实数据进行测试更加容易。

the testing documentation 详细信息。

管理界面的改进

一个小的改变,但是一个非常好的改变:用于添加和更新用户的专用视图已经添加到管理界面,所以您不再需要担心在管理中使用哈希密码。

谢谢

自0.95年以来,一批人向前迈进,在德江的发展中发挥了重要的新作用。我们要感谢这些人的辛勤工作:

  • Russell Keith Magee和Malcolm Tredinnick的主要代码贡献。没有他们,这个版本是不可能的。

  • 我们的新版本经理,詹姆斯·班纳特,他致力于推出0.95.1、0.96和(希望)未来的版本。

  • 我们的票务经理Chris Beaven(又名Smileychris)、Simon Greenhill、Michael Radziej和Gary Wilson。他们同意承担这项艰巨的任务,把我们的票打包成好的目录提交。现在弄清楚要做什么要容易上百万倍;再次感谢,伙计们。

  • 所有提交错误报告、补丁或工单评论的人。我们不可能点名感谢每个人--超过200名开发人员提交了0.96版本的补丁--但每个为Django做出贡献的人都列在 AUTHORS