Django 0.96 版发行说明 — Django 文档
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,而数据库本身包含以旧形式命名的约束; 这将导致数据库服务器发出关于修改不存在的约束的错误消息。
若你需要解决此问题,那将有两种方法可用:
- 将
manage.py
的输出重定向到一个文件,并在执行之前编辑生成的 SQL 以使用正确的约束名称。 - 检查
manage.py sqlall
的输出以查看新式约束名称,并将其用作重命名数据库中现有约束的指南。
manage.py 中的名称更改
manage.py
的一些选项随着夹具支持的增加而改变:
- 有新的
dumpdata
和loaddata
命令,如您所料,它们将向/从数据库转储和加载数据。 这些命令可以对任何 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 道歉)。 您可以基于 doctest
或 unittest
编写测试,并使用简单的测试客户端测试您的视图。
还有对“夹具”的新支持——初始数据,存储在任何受支持的 序列化格式 ,将在测试开始时加载到您的数据库中。 这使得使用真实数据进行测试变得更加容易。
有关完整详细信息,请参阅 测试文档 。
管理界面的改进
一个很小但是很不错的修改:在管理界面中增加了用于添加和更新用户的专用视图,所以你不再需要担心在管理中使用哈希密码的问题。
谢谢
自 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 中。