欢迎来到Django 0.96!
0.96的主要目标是清理和稳定0.95中引入的特征。自0.95以来,已经出现了一些小的向后不兼容的更改,但是升级过程应该相当简单,并且不需要对现有应用程序进行重大更改。
但是,我们现在也发布0.96,因为我们有一组向后兼容的更改计划在不久的将来。一旦完成,他们将涉及一些代码更改为应用程序开发人员,所以我们建议你坚持使用Django 0.96直到下一个正式发布;那么您将能够在一个步骤中升级,而不需要进行增量更改以跟上Django的开发版本。
以下更改可能需要您在从0.95切换到0.96时更新代码:
由于旧版本的MySQLdb Python模块(Django用于连接到MySQL数据库)中的错误,Django的MySQL后端现在需要版本1.2.1p2或更高版本的MySQLdb ,如果您尝试使用旧版本,则会引发异常。
如果您目前无法升级MySQLdb的副本以满足此要求,则已将一个单独的向后兼容的后端(称为“mysql_old”)添加到Django。要使用此后端,请更改Django设置文件中的DATABASE_ENGINE设置:
DATABASE_ENGINE = "mysql"
对此:
DATABASE_ENGINE = "mysql_old"
但是,我们强烈建议MySQL用户尽快升级到更新版本的MySQLdb,“mysql_old”后端仅用于缓解此转换,并被视为已弃用;除了任何必要的安全修补程序,它不会被积极维护,它会在未来的Django版本中删除。
此外,请注意,一些功能(如新的DATABASE_OPTIONS设置(有关详细信息,请参见databases documentation)仅在“mysql”后端可用,可用于“mysql_old”。
外键引用的Django生成的约束名称的格式稍有变化。这些名称通常仅在不可能直接将引用放在受影响的列上时使用,因此它们并不总是可见的。
此更改的效果是,对现有数据库运行manage.py 重置和类似命令可能会生成具有新形式的约束名称的SQL ,而数据库本身包含以旧形式命名的约束;这将导致数据库服务器提出关于修改不存在的约束的错误消息。
如果你需要解决这个问题,有两种方法可用:
添加灯具支持后,manage.py的几个选项已更改:
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='\\')
此版本代表了超过一千个源提交和四百多个错误修复,因此我们无法将所有更改编入目录。在这里,我们描述在这个版本中最显着的变化。
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的用户将需要如上所述更改其import语句。
之后的下一个版本将完全删除django.oldforms。
虽然newforms库将继续发展,但它可以在大多数常见情况下使用。我们建议任何新的表单处理的人跳过旧表单系统,并从新的。
有关django.newforms的详细信息,请参阅newforms documentation。
您现在可以使用任何可调用作为URLconfs中的回调(以前,仅允许引用callables的字符串)。这允许更自然地使用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)
)
当使用装饰器时可以看到这一点的一个有用的应用;此更改允许您将装饰器应用于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编写测试,并使用简单的测试客户端测试您的视图。
还有对“fixtures”的新支持 - 初始数据,存储在任何支持的serialization formats中,将在测试开始时加载到数据库中。这使得使用真实数据的测试变得容易得多。
有关完整详细信息,请参见the testing documentation。
一个小的变化,但一个非常好的:添加和更新用户的专用视图已添加到管理界面,所以你不再需要担心在管理员中使用散列密码。
自0.95年以来,一些人已经前进,在Django的发展中发挥了重要的新作用。我们要感谢这些人的辛勤工作:
2015年5月13日