欢迎来到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,而数据库本身包含旧形式中命名的约束;这将导致数据库服务器发出有关修改不存在约束的错误消息。
如果需要解决此问题,可以使用两种方法:
重定向的输出 manage.py
到一个文件,并在执行前编辑生成的SQL以使用正确的约束名。
检查的输出 manage.py sqlall
要查看新样式的约束名称,并将其用作重命名数据库中现有约束的指南。
manage.py
¶一些选择 manage.py
随着夹具支架的增加而改变:
有新的 dumpdata
和 loaddata
如您所料,这些命令将把数据转储到数据库或从数据库中加载数据。这些命令可以对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="\\")
这个 ENABLE_PSYCO
设置不再存在。如果设置文件包括 ENABLE_PSYCO
它没有效果;使用 Psyco, 我们建议编写一个中间件类来激活它。
这个版本代表了超过一千个源提交和超过四百个错误修复,所以我们不可能编目所有的更改。在这里,我们描述了这个版本中最显著的变化。
django.newforms
是Django的新表单处理库。它代替了 django.forms
,旧的表单/操纵器/验证框架。这两个API在0.96版本中都可用,但在接下来的两个版本中,我们计划完全切换到新的表单系统,并取消对旧系统的预测和删除。
这种转变有三个要素:
我们复制了当前 django.forms
到 django.oldforms
. 这允许您升级代码 now 而不是等待向后不兼容的更改,并在事实发生后急于修复代码。只需像这样更改导入语句:
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 documentation .
您现在可以在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道歉)。您可以根据 doctest
或 unittest
并使用一个简单的测试客户机测试您的视图。
还有对“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 。
12月 18, 2023