Django 0.96 版发行说明 — Django 文档

来自菜鸟教程
Django/docs/3.1.x/releases/0.96
跳转至:导航、​搜索

Django 0.96 版发行说明

欢迎使用 Django 0.96!

0.96 的主要目标是清理和稳定 0.95 中引入的功能。 自 0.95 以来,有一些小的 向后不兼容的更改 ,但升级过程应该相当简单,不需要对现有应用程序进行重大更改。

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

向后不兼容的更改

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

MySQLdb 版本要求

由于 MySQLdb Python 模块(Django 用于连接 MySQL 数据库)的旧版本中的错误,Django 的 MySQL 后端现在需要 MySQLdb 的 1.2.1p2 或更高版本,并将提高如果您尝试使用旧版本,则例外。

如果您当前无法升级 MySQLdb 的副本以满足此要求,则已将一个名为“mysql_old”的单独的、向后兼容的后端添加到 Django。 要使用此后端,请更改 Django 设置文件中的 DATABASE_ENGINE 设置:

DATABASE_ENGINE = "mysql"

对此:

DATABASE_ENGINE = "mysql_old"

但是,我们强烈鼓励 MySQL 用户尽快升级到更新版本的 MySQLdb,提供“mysql_old”后端只是为了缓解这种过渡,并被视为已弃用; 除了任何必要的安全修复之外,它不会被积极维护,它将在 Django 的未来版本中删除。

另请注意,某些功能,例如新的 DATABASE_OPTIONS 设置(有关详细信息,请参阅 数据库文档 ),仅在“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 代码,并且它之前工作过(尽管没有转义),您必须将代码更改为“取消转义”斜杠一级。

例如,这曾经有效:

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

上面的现在是不正确的,应该改写为:

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

删除了 ENABLE_PSYCO 设置

ENABLE_PSYCO 设置不再存在。 如果您的设置文件包含 ENABLE_PSYCO,它将不起作用; 要使用 Psyco,我们建议编写一个中间件类来激活它。


0.96 中有什么新内容?

本次修订代表了一千多个源代码提交和四百多个错误修复,因此我们不可能对所有更改进行编目。 在这里,我们描述了此版本中最显着的变化。

新表单库

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

这种转变包含三个要素:

  • 我们已将当前的 django.forms 复制到 django.oldforms。 这允许您立即升级您的代码 ',而不是等待向后不兼容的更改并在事后急于修复您的代码。 只需像这样更改导入语句:

    from django import forms             # 0.95-style
    from django import oldforms as forms # 0.96-style
  • Django 的下一个正式版本会将当前的 django.newforms 移动到 django.forms。 这将是一个向后不兼容的更改,并且当时仍在使用旧版本 django.forms 的任何人都需要如上所述更改他们的导入语句。

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

尽管 newforms 库将继续发展,但它已准备好用于大多数常见情况。 我们建议任何不熟悉表单处理的人跳过旧的表单系统并从新的开始。

有关 django.newforms 的更多信息,请阅读 newforms 文档


URLconf 改进

您现在可以使用任何可调用对象作为 URLconfs 中的回调(以前,只允许引用可调用对象的字符串)。 这允许更自然地使用 URLconf。 例如,这个 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)
)

使用装饰器时可以看到这一点的一个有用应用; 此更改允许您将装饰器应用于 URLconf 中的视图 。 因此,您可以非常轻松地使通用视图需要登录:

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 现在包含一个测试框架,因此您可以开始将恐惧转化为无聊(向 Kent Beck 道歉)。 您可以基于 doctestunittest 编写测试,并使用简单的测试客户端测试您的视图。

还有对“夹具”的新支持——初始数据,存储在任何受支持的 序列化格式 ,将在测试开始时加载到您的数据库中。 这使得使用真实数据进行测试变得更加容易。

有关完整详细信息,请参阅 测试文档


管理界面的改进

一个小改动,但非常好:用于添加和更新用户的专用视图已添加到管理界面,因此您不再需要担心在管理中使用散列密码。


谢谢

自 0.95 以来,许多人挺身而出,并在 Django 的发展中扮演了重要的新角色。 我们要感谢这些人的辛勤工作:

  • Russell Keith-Magee 和 Malcolm Tredinnick 为他们的主要代码贡献。 没有他们,这个版本是不可能的。
  • 我们的新发布经理 James Bennett,感谢他在发布 0.95.1、0.96 和(希望如此)未来版本方面所做的工作。
  • 我们的票务经理 Chris Beaven(又名 SmileyChris)、Simon Greenhill、Michael Radziej 和 Gary Wilson。 他们同意承担将我们的门票整理成精心编目提交的艰巨任务。 弄清楚要做什么现在大约容易一百万倍; 再次感谢,伙计们。
  • 提交错误报告、补丁或票证评论的每个人。 我们不可能点名感谢每个人——超过 200 名开发人员提交了进入 0.96 的补丁——但是每个为 Django 做出贡献的人都列在 AUTHORS 中。