2014年9月2日
欢迎来到Django 1.7!
这些发行说明涵盖了 new features 以及一些 backwards incompatible changes 从django 1.6或更旧版本升级时,您需要注意。我们已经 begun the deprecation process for some features 和一些特性已经达到了它们的折旧过程的末尾,并且 have been removed .
Django1.7需要python 2.7、3.2、3.3或3.4。我们 强烈推荐 只有官方支持每个系列的最新版本。
Django1.6系列是最后一个支持python 2.6的系列。Django1.7是第一个支持Python3.4的版本。
这种更改只会影响少数Django用户,因为目前大多数操作系统供应商都将python 2.7或更新版本作为其默认版本。但是,如果您仍在使用python 2.6,则需要坚持使用django 1.6,直到您可以升级python版本。每 our support policy ,django 1.6将继续获得安全支持,直到django 1.8发布。
Django现在已经内置了对模式迁移的支持。它允许通过创建表示模型更改的迁移文件来更新、更改和删除模型,这些文件可以在任何开发、分段或生产数据库上运行。
迁移包含在 their own documentation 但一些关键特性是:
syncdb
已被否决并替换为 migrate
. 别担心-调用给 syncdb
仍然可以像以前一样工作。
一个新的 makemigrations
命令提供了一种简单的方法来自动检测对模型的更改并为它们进行迁移。
django.db.models.signals.pre_syncdb
和 django.db.models.signals.post_syncdb
已弃用,将替换为 pre_migrate
和 post_migrate
分别。这些新信号的论据略有不同。有关详细信息,请查看文档。
这个 allow_syncdb
现在调用数据库路由器上的方法 allow_migrate
,但仍执行相同的功能。路由器与 allow_syncdb
方法仍然有效,但该方法名称已被弃用,您应尽快更改它(只需要重命名即可)。
initial_data
带有迁移的应用程序不再加载设备;如果要加载应用程序的初始数据,我们建议您为应用程序创建迁移并定义 RunPython
或 RunSQL
中的操作 operations
迁移的部分。
对于具有迁移的应用程序,测试回滚行为是不同的;特别是,Django将不再在非事务数据库或内部模拟回滚。 TransactionTestCase
unless specifically requested .
不建议有没有迁移的应用程序依赖于 ForeignKey
或 ManyToManyField
迁移的应用程序。
历史上,Django应用程序与模型紧密相连。一个名为“应用缓存”的单例程序同时处理已安装的应用程序和模型。模型模块被用作许多API中应用程序的标识符。
作为概念 Django applications 成熟后,该代码显示出一些缺陷。它被重构为“应用程序注册表”,模型模块不再具有中心角色,并且可以在其中将配置数据附加到应用程序。
到目前为止,改进包括:
应用程序可以在启动时运行代码,在Django执行任何其他操作之前, ready()
它们的配置方法。
应用程序标签被正确地分配给模型,即使它们是在外部定义的 models.py
. 你不必设置 app_label
再明确一点。
可以忽略 models.py
完全如果应用程序没有任何模型。
应用程序可以通过 label
应用程序配置的属性,以解决标签冲突。
应用程序的名称可以在管理员中通过 verbose_name
应用程序配置。
管理员自动调用 autodiscover()
当姜戈开始的时候。因此,您可以从URLCONF中删除该行。
Django一开始就导入所有的应用程序配置和模型,通过一个确定性和简单的过程。这样可以更容易地诊断导入问题,如导入循环。
为了帮助增强模式迁移,并在将来的django版本中更容易地添加复合键,可以使用 Field
API现在有了一个新的必需方法: deconstruct()
.
此方法不接受任何参数,并返回由四个项组成的元组:
name
:该字段在其父模型上的属性名称,或 None
如果它不是模型的一部分
path
:指向该字段类的一条虚线、python路径,包括类名。
args
:位置参数,作为列表
kwargs
:关键字参数,如dict
这四个值允许将任何字段序列化到文件中,并允许安全地复制字段,这两个都是这些新特性的基本部分。
除非编写自定义字段子类,否则此更改不应影响您;如果这样做,则可能需要重新实现 deconstruct()
方法如果子类更改了 __init__
无论如何。如果您的字段只是继承自内置的Django字段而不重写 __init__
,无需更改。
如果您确实需要覆盖 deconstruct()
,一个很好的起点是内置的Django油田。 (django/db/models/fields/__init__. py
)作为几个字段,包括 DecimalField
和 DateField
,重写它并演示如何在超类上调用该方法,以及简单地添加或删除额外的参数。
这还意味着字段的所有参数本身都必须是可序列化的;要查看我们认为是可序列化的,并了解如何使自己的类可序列化,请阅读 migration serialization documentation .
QuerySet
方法来自 Manager
¶在历史上,建议使用可重用模型查询的方法是在自定义的 Manager
类。这种方法的问题是,在第一个方法调用之后,您将返回 QuerySet
实例,无法调用其他自定义管理器方法。
尽管没有文档记录,但通过创建自定义 QuerySet
这样就可以将自定义方法链接起来;但是该解决方案有许多缺点:
习俗 QuerySet
它的自定义方法在第一次调用 values()
或 values_list()
.
编写自定义 Manager
仍然需要归还海关 QuerySet
类和在 Manager
必须委托给 QuerySet
. 整个过程违反了干燥原则。
这个 QuerySet.as_manager()
类方法现在可以直接 create Manager with QuerySet methods ::
class FoodQuerySet(models.QuerySet):
def pizzas(self):
return self.filter(kind="pizza")
def vegetarian(self):
return self.filter(vegetarian=True)
class Food(models.Model):
kind = models.CharField(max_length=50)
vegetarian = models.BooleanField(default=False)
objects = FoodQuerySet.as_manager()
Food.objects.pizzas().vegetarian()
现在可以 specify a custom manager 当遍历反向关系时:
class Blog(models.Model):
pass
class Entry(models.Model):
blog = models.ForeignKey(Blog)
objects = models.Manager() # Default Manager
entries = EntryManager() # Custom Manager
b = Blog.objects.get(id=1)
b.entry_set(manager="entries").all()
我们添加了一个新的 System check framework 用于检测常见问题(如无效模型)并提供解决这些问题的提示。该框架是可扩展的,因此您可以为自己的应用程序和库添加自己的检查。
要执行系统检查,请使用 check
管理命令。此命令替换旧的 validate
管理命令。
管理员中日期和时间输入小部件旁边的“今天”和“现在”快捷方式现在在 current time zone . 以前,他们使用浏览器时区,当浏览器时区与服务器上的当前时区不匹配时,可能会导致保存错误的值。
此外,当浏览器和服务器时区不同时,小部件现在会显示一条帮助消息,以说明如何解释字段中插入的值。
在Python2.7之前,数据库游标可以用作上下文管理器。特定后端的光标定义了上下文管理器的行为。使用python 2.7更改了magic方法查找的行为,并且不再将光标用作上下文管理器。
Django1.7允许将光标用作上下文管理器。也就是说,可以使用以下内容:
with connection.cursor() as c:
c.execute(...)
而不是::
c = connection.cursor()
try:
c.execute(...)
finally:
c.close()
现在可以为ORM编写自定义查找和转换。自定义查找的工作方式与Django的内置查找(例如 lte
, icontains
)而变换是一个新概念。
这个 django.db.models.Lookup
类提供了一种为模型字段添加查找运算符的方法。例如,可以添加 day_lte
算子 DateFields
.
这个 django.db.models.Transform
类允许在最终查找之前转换数据库值。例如,可以编写 year
从字段值中提取年份的转换。转换允许链接。后 year
转换已添加到 DateField
例如,可以对转换值进行过滤 qs.filter(author__birthdate__year__lte=1981)
.
有关自定义查找和转换的详细信息,请参阅 custom lookups 文档。
Form
错误处理¶Form.add_error()
¶以前有两种处理表单错误的主要模式:
抬高 ValidationError
从某些功能(例如 Field.clean()
, Form.clean_<fieldname>()
或 Form.clean()
对于非字段错误。)
摆弄 Form._errors
当在 Form.clean()
或者从“干净”方法之外添加错误(例如直接从视图)。
使用前一种模式非常简单,因为表单可以从错误所属的上下文(即哪个方法引发异常)进行猜测,并自动处理它们。这仍然是在可能的情况下添加错误的规范方法。但是,由于处理边缘案例的负担落在了用户身上,后者非常谨慎且容易出错。
新的 add_error()
方法允许从任何地方向特定表单字段添加错误,而不必担心诸如创建 django.forms.utils.ErrorList
或处理 Form.cleaned_data
. 这个新的API取代了操纵 Form._errors
现在变成了一个私有的API。
见 清理和验证相互依赖的字段 例如,使用 Form.add_error()
.
这个 ValidationError
构造函数接受元数据,如错误 code
或 params
然后可将其插入错误消息(请参见 饲养 ValidationError 但是,在django 1.7之前,这些元数据在添加到 Form.errors
.
Form.errors
和 django.forms.utils.ErrorList
现在存储 ValidationError
实例,以便随时通过新的 Form.errors.as_data
方法。
检索到的 ValidationError
然后,由于错误,可以识别实例 code
它支持重写错误消息或在出现给定错误时在视图中写入自定义逻辑等操作。它还可以用于以自定义格式(如XML)序列化错误。
新的 Form.errors.as_json()
方法是一种方便的方法,它返回错误消息以及序列化为JSON的错误代码。 as_json()
使用 as_data()
并给出了如何扩展新系统的概念。
为了支持上述功能,需要对各种错误容器进行重大更改,特别是 Form.errors
, django.forms.utils.ErrorList
以及 ValidationError
. 这些用于存储错误字符串的容器现在存储 ValidationError
实例和公共API已经被修改为尽可能使其透明,但是如果您一直在使用私有API,则某些更改是向后不兼容的;请参见 ValidationError 建造和内部储存 了解更多详细信息。
django.contrib.admin
¶现在可以实现 site_header
, site_title
和 index_title
自定义的属性 AdminSite
以便轻松更改管理网站的页面标题和标题文本。不再需要重写模板!
按钮在 django.contrib.admin
现在使用 border-radius
圆角而不是GIF背景图像的CSS属性。
一些管理模板现在已经 app-<app_name>
和 model-<model_name>
他们的类 <body>
标记以允许自定义每个应用程序或每个模型的CSS。
管理更改列表单元格现在有一个 field-<field_name>
类以启用样式自定义。
由于新的 django.contrib.admin.ModelAdmin.get_search_fields()
方法。
这个 ModelAdmin.get_fields()
方法可以重写以自定义 ModelAdmin.fields
.
除了现有的 admin.site.register
语法,您可以使用 register()
装饰师注册 ModelAdmin
.
您可以指定 ModelAdmin.list_display_links
= None
禁用更改列表页网格上的链接。
您现在可以指定 ModelAdmin.view_on_site
控制是否显示“现场查看”链接。
您可以为 ModelAdmin.list_display
通过在 admin_order_field
带连字符的值。
这个 ModelAdmin.get_changeform_initial_data()
方法可以重写以定义用于设置初始更改表单数据的自定义行为。
django.contrib.auth
¶任何 **kwargs
传递给 email_user()
传递给基础 send_mail()
调用。
这个 permission_required()
decorator可以获取权限列表以及单个权限。
您可以覆盖新的 AuthenticationForm.confirm_login_allowed()
方法更容易自定义登录策略。
django.contrib.auth.views.password_reset()
选择一个选项 html_email_template_name
用于发送密码重置的多部分HTML电子邮件的参数。
这个 AbstractBaseUser.get_session_auth_hash()
方法已添加,如果 AUTH_USER_MODEL
继承自 AbstractBaseUser
,如果 django.contrib.auth.middleware.SessionAuthenticationMiddleware
启用。见 密码更改时会话无效 了解更多详细信息。
django.contrib.formtools
¶调用 WizardView.done()
现在包括一个 form_dict
允许通过步骤名称更容易地访问表单。
django.contrib.gis
¶小部件中包含的默认Openlayers库版本已从2.11更新为2.13。
准备好的几何图形现在也支持 crosses
, disjoint
, overlaps
, touches
和 within
谓词(如果安装了GEOS 3.3或更高版本)。
django.contrib.messages
¶后端 django.contrib.messages
使用cookies的,现在将遵循 SESSION_COOKIE_SECURE
和 SESSION_COOKIE_HTTPONLY
设置。
这个 messages context processor 现在在名称下添加默认级别的字典 DEFAULT_MESSAGE_LEVELS
.
Message
对象现在具有一个 level_tag
属性,该属性包含消息级别的字符串表示形式。
django.contrib.redirects
¶RedirectFallbackMiddleware
有两个新属性 (response_gone_class
和 response_redirect_class
)它指定了 HttpResponse
中间件返回的实例。
django.contrib.sessions
¶这个 "django.contrib.sessions.backends.cached_db"
会话后台现在尊重 SESSION_CACHE_ALIAS
.在之前的版本中,它总是使用 default
缓存
django.contrib.sitemaps
¶这个 sitemap framework
现在利用 lastmod
设置一个 Last-Modified
响应中的标题。这使得 ConditionalGetMiddleware
处理条件 GET
请求设置的站点地图 lastmod
.
django.contrib.sites
¶新的 django.contrib.sites.middleware.CurrentSiteMiddleware
允许对每个请求设置当前网站。
django.contrib.staticfiles
¶这个 static files storage classes 可以通过设置 file_permissions_mode
和 directory_permissions_mode
参数。见 collectstatic
例如用法。
这个 CachedStaticFilesStorage
后端获取名为 ManifestStaticFilesStorage
它根本不使用缓存系统,而是使用一个名为 staticfiles.json
用于存储原始文件名之间的映射(例如 css/styles.css
)以及哈希文件名(例如 css/styles.55e7cbb9ba48.css
)这个 staticfiles.json
文件是在运行 collectstatic
管理命令,对于像AmazonS3这样的远程存储来说应该是一个更便宜的选择。
见 ManifestStaticFilesStorage
有关详细信息,请参阅文档。
findstatic
现在接受详细标志级别2,这意味着它将显示它搜索的目录的相对路径。见 findstatic
例如输出。
访问中配置的缓存 CACHES
现在可通过 django.core.cache.caches
. 这个类似dict的对象为每个线程提供不同的实例。它取代了 django.core.cache.get_cache()
现在已弃用。
如果直接实例化缓存后端,请注意它们不再是线程安全的,因为 django.core.cache.caches
现在每个线程生成不同的实例。
定义 TIMEOUT
论证 CACHES
设置为 None
默认情况下将缓存键设置为“非过期”。以前,只有通过 timeout=None
到缓存后端的 set()
方法。
这个 CSRF_COOKIE_AGE
设置有助于使用基于会话的CSRF cookie。
send_mail()
现在接受 html_message
用于发送多部分的参数 text/plain 和 text/html 电子邮件.
SMTP EmailBackend
现在接受 timeout
参数。
Windows上的文件锁定以前依赖于pywin32包;如果未安装该包,则文件锁定将以静默方式失败。该依赖项已被删除,文件锁定现在在Windows和Unix上以本机方式实现。
新的 UploadedFile.content_type_extra
属性包含传递给 content-type
文件上传的头文件。
新的 FILE_UPLOAD_DIRECTORY_PERMISSIONS
设置控制文件上载期间创建的目录的文件系统权限,例如 FILE_UPLOAD_PERMISSIONS
为文件本身。
这个 FileField.upload_to
属性现在是可选的。如果省略或给出 None
或者空字符串,子目录将不会用于存储上载的文件。
在将响应传递到客户端之前,上载的文件现在显式关闭。部分上载的文件只要命名,也会关闭。 file
在上载处理程序中。
Storage.get_available_name()
现在附加一个下划线和一个随机的7个字母数字字符串(例如 "_x3a1gho"
,而不是通过一个下划线和一个数字(例如 "_1"
, "_2"
等)以防止拒绝服务攻击。在1.6.6、1.5.9和1.4.14安全版本中也进行了此更改。
这个 <label>
和 <input>
标记呈现者 RadioSelect
和 CheckboxSelectMultiple
循环切换单选按钮或复选框时,现在包括 for
和 id
属性。每个单选按钮或复选框包括 id_for_label
属性以输出元素的ID。
这个 <textarea>
标记呈现者 Textarea
现在包括一个 maxlength
属性如果 TextField
模型字段具有 max_length
.
Field.choices
现在,您可以通过包含一个带有空字符串的元组或 None
将键和自定义标签作为值。默认空白选项 "----------"
在这种情况下将被省略。
MultiValueField
通过设置 require_all_fields
参数 False
. 这个 required
将尊重每个字段的属性,并 incomplete
当任何必需字段为空时,将引发验证错误。
这个 clean()
窗体上的方法不再需要返回 self.cleaned_data
. 如果它确实返回了一个已更改的字典,那么它仍然会被使用。
在Django 1.6暂时回归后,现在又有可能 TypedChoiceField
coerce
方法返回任意值。
SelectDateWidget.months
可用于自定义“选择”小部件中显示的月份的措辞。
这个 min_num
和 validate_min
参数已添加到 formset_factory()
允许验证提交的表单的最小数目。
使用的元类 Form
和 ModelForm
已经被改写以支持更多的继承场景。以前的限制阻止了两者的继承 Form
和 ModelForm
同时被移除只要 ModelForm
首先出现在MRO中。
现在可以从 Form
当通过将名称设置为 None
.
现在可以为自定义错误消息 ModelForm
的 unique
, unique_for_date
和 unique_together
约束条件。为了支持 unique_together
或其他 NON_FIELD_ERROR
, ModelForm
现在寻找 NON_FIELD_ERROR
关键在 error_messages
字典 ModelForm
内心 Meta
类。见 considerations regarding model's error_messages 了解更多详细信息。
这个 django.middleware.locale.LocaleMiddleware.response_redirect_class
属性允许您自定义中间件发出的重定向。
这个 LocaleMiddleware
现在使用会话密钥存储用户选择的语言 _language
.只能使用 LANGUAGE_SESSION_KEY
常数以前它与密钥一起存储 django_language
以及 LANGUAGE_SESSION_KEY
constant不存在,但为Django保留的键应该以强调线开始。为了向后兼容 django_language
仍然从1.7中读取。会话将在编写时迁移到新密钥。
这个 blocktrans
标记现在支持 trimmed
选择。此选项将从内容的开头和结尾删除换行符 {% blocktrans %}
标记,替换行首和行尾的任何空格,并使用空格字符将所有行合并为一行。这对于缩进 {% blocktrans %}
标记中的相应条目中没有缩进字符的 .po
文件,这使得翻译过程变得更容易。
当你奔运行 makemessages
从项目的根目录中,任何提取的字符串现在都将自动分发到适当的应用程序或项目消息文件。见 本地化:如何创建语言文件 有关详细信息。
这个 makemessages
命令现在总是将 --previous
命令行标志设置为 msgmerge
命令,将先前翻译的字符串保存在 .po
模糊字符串的文件。
引入了以下设置来调整语言cookie选项: LANGUAGE_COOKIE_AGE
, LANGUAGE_COOKIE_DOMAIN
和 LANGUAGE_COOKIE_PATH
.
补充 格式本地化 世界语。
新的 --no-color
选择权 django-admin
禁用管理命令输出的着色。
新的 dumpdata --natural-foreign
和 dumpdata --natural-primary
选项,以及新的 use_natural_foreign_keys
和 use_natural_primary_keys
参数的理由 serializers.serialize()
,允许在序列化时使用自然主键。
不再需要提供缓存表名或 --database
选项为 createcachetable
命令。Django从设置文件中获取此信息。如果配置了多个缓存或多个数据库,则会创建所有缓存表。
这个 runserver
司令部得到了几项改进:
在Linux系统上,如果 pyinotify 安装后,当文件更改时,开发服务器将立即重新加载。以前,它每秒轮询文件系统以获取更改。这导致了重新加载之前的小延迟,并缩短了笔记本电脑的电池寿命。
此外,当更新翻译文件时,即在运行之后,开发服务器会自动重新加载。 compilemessages
.
所有HTTP请求都会记录到控制台,包括对静态文件或 favicon.ico
以前是过滤掉的。
如果安装了ansicon第三方工具并处于活动状态,管理命令现在可以在Windows下生成语法颜色的输出。
collectstatic
Windows NT 6(Windows Vista和更新版本)现在支持带symlink选项的命令。
初始SQL数据现在可以更好地工作 sqlparse 已安装了Python库。
请注意,它已被弃用,取而代之的是 RunSQL
迁移操作,这得益于改进的行为。
这个 QuerySet.update_or_create()
方法已添加。
新的 default_permissions
模型 Meta
选项允许您自定义(或禁用)默认添加、更改和删除权限的创建。
明确的 OneToOneField
对于 多表继承 现在在抽象类中发现。
现在可以避免为 OneToOneField
通过设置 related_name
到 '+'
或者以 '+'
.
F expressions
支持电力运营商 (**
)
这个 remove()
和 clear()
相关管理者的方法 ForeignKey
和 GenericForeignKey
现在接受 bulk
关键字参数,用于控制是否批量执行操作(即使用 QuerySet.update()
)默认为 True
.
现在可以使用 None
作为 iexact
查找。
现在可以为属性传递一个可调用的值 limit_choices_to
定义一个 ForeignKey
或 ManyToManyField
.
调用 only()
和 defer()
关于结果 QuerySet.values()
现在引发一个错误(在此之前,它可能会导致数据库错误或数据不正确)。
您可以使用单个列表来 index_together
(而不是列表列表)。
现在允许对参与多对多关系的任何模型具有多个外键的自定义中间模型,前提是通过设置新的 ManyToManyField.through_fields
参数。
将模型实例分配给非关系字段现在将引发错误。在此之前,如果字段接受整数作为输入并接受主键,则此操作将起作用。
整数字段现在根据数据库后端特定的最小值和最大值进行验证 internal_type
. 以前的模型字段验证不会阻止保存超出其关联列数据类型范围的值,从而导致完整性错误。
现在可以明确地 order_by()
关系 _id
字段的属性名。
这个 enter
参数已添加到 setting_changed
信号。
现在可以使用 str
的 'app_label.ModelName'
表单——就像相关字段一样——懒散地引用它们的发送者。
这个 Context.push()
方法现在返回一个上下文管理器,该管理器自动调用 pop()
一旦退出 with
语句。此外, push()
现在接受传递给 dict
用于生成新上下文级别的构造函数。
新的 Context.flatten()
方法返回 Context
把它叠成一本平字典。
Context
现在可以比较对象是否相等(在内部, Context.flatten()
所以每一个的内部结构 Context
只要它们的扁平版本相同,其堆栈就不重要。
这个 widthratio
模板标记现在接受 "as"
参数来捕获变量中的结果。
这个 include
模板标记现在也将接受 render()
方法(例如 Template
)作为一个论点。字符串参数将使用 get_template()
一如既往。
现在可以 include
递归模板。
模板对象现在有一个原点属性集,当 TEMPLATE_DEBUG
是 True
. 这允许在 django.template
基础设施。
TypeError
当在呈现模板期间引发异常时,异常不再消声。
以下函数现在接受 dirs
要重写的列表或元组的参数 TEMPLATE_DIRS
:
django.shortcuts.render_to_response()
这个 time
过滤器现在接受与时区相关的 format specifiers 'e'
, 'O'
, 'T'
和 'Z'
能够消化 time-zone-aware datetime
执行预期呈现的实例。
这个 cache
标记现在将尝试使用名为“template_fragments”的缓存(如果存在),否则返回使用默认缓存。它现在还接受一个可选的 using
关键字参数来控制它使用的缓存。
新的 truncatechars_html
考虑到HTML,筛选会将字符串截断为不超过指定的字符数。
新的 HttpRequest.scheme
属性指定请求的方案 (http
或 https
正常情况下)。
捷径 redirect()
现在支持相对URL。
新的 JsonResponse
亚类 HttpResponse
帮助轻松创建JSON编码的响应。
DiscoverRunner
有两个新属性, test_suite
和 test_runner
这有助于覆盖测试的收集和运行方式。
这个 fetch_redirect_response
参数已添加到 assertRedirects()
. 由于测试客户机无法获取外部URL,因此可以使用 assertRedirects
重定向不属于你的django应用程序。
在进行比较时正确处理方案 assertRedirects()
.
这个 secure
参数已添加到的所有请求方法中 Client
.如果 True
,请求将通过https进行。
assertNumQueries()
如果断言失败,现在打印出已执行查询的列表。
这个 WSGIRequest
测试处理程序生成的实例现在附加到 django.test.Response.wsgi_request
属性。
用于测试的数据库设置已收集到名为 TEST
.
改进 strip_tags()
准确性(但它仍然不能保证HTML安全结果,如文档中所述)。
RegexValidator
现在接受选项 flags
布尔函数 inverse_match
参数。这个 inverse_match
属性确定 ValidationError
当正则表达式模式匹配时应引发 (True
)或不匹配 (False
,默认情况下)提供的 value
. 这个 flags
属性设置在编译正则表达式字符串时使用的标志。
URLValidator
现在接受一个可选的 schemes
允许自定义接受的URI方案(而不是默认值)的参数 http(s)
和 ftp(s)
)
validate_email()
现在接受带有ipv6文本的地址,比如 example@[2001:db8::1]
,如RFC 5321所规定。
警告
除了本节概述的更改外,请务必查看 deprecation plan 对于任何已删除的功能。如果您没有在取消预测时间线内更新给定功能的代码,则删除该功能可能会显示为向后不兼容的更改。
allow_syncdb
/ allow_migrate
¶当姜戈还在看的时候 allow_syncdb
方法,即使它们应该重命名为 allow_migrate
,在传递模型到这些方法的过程中存在细微的差异。
对于带有迁移的应用程序, allow_migrate
现在会通过的 historical models 是没有自定义属性、方法或管理器的特殊版本化模型。确定你的 allow_migrate
方法仅引用中的字段或其他项 model._meta
.
带有迁移的应用程序将不会加载 initial_data
完成迁移后的设备。没有迁移的应用程序将在 migrate
模仿旧的 syncdb
行为,但任何新的应用程序都不会有这种支持。
相反,如果需要,建议您在迁移中加载初始数据(使用 RunPython
操作和您的模型类);这有一个额外的优点,即您的初始数据在每次更改模式时都不需要更新。
另外,像姜戈的其他老朋友一样 syncdb
代码, initial_data
已沿折旧路径启动,将在Django 1.9中删除。
deconstruct()
和可序列化¶Django现在要求所有字段类及其所有构造函数参数都是可序列化的。如果以任何方式修改自定义字段中的构造函数签名,则需要实现 deconstruct()
方法;我们通过以下方式扩展了自定义字段文档 instructions on implementing this method 。
所有字段参数的要求为 serializable 意味着任何正在传递给字段构造函数的自定义类实例(例如自定义存储子类)都需要 deconstruct method defined on them as well 尽管Django提供了一个方便的类修饰器,它将适用于大多数应用程序。
Django1.7一开始就加载应用程序配置和模型。虽然这种行为更为直接,而且被认为更为稳健,但不能排除回归。见 故障排除 以解决您可能遇到的一些问题。
如果您在纯Python脚本(而不是管理命令)中使用Django,并且您依赖 DJANGO_SETTINGS_MODULE
环境变量,您现在必须在脚本的开头显式初始化Django:
>>> import django
>>> django.setup()
否则,您将击中 AppRegistryNotReady
例外。
在django 1.3之前,创建wsgi应用程序的建议方法是:
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
在Django 1.4中,对wsgi的支持得到了改进,API改为:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
如果在wsgi脚本中仍然使用前一种样式,则需要升级到后一种样式,否则将 AppRegistryNotReady
例外。
无法再使用同一标签安装多个应用程序。在之前的Django版本中,这并不总是能正常工作,但也没有完全崩溃。
如果有两个应用程序具有相同的标签,则应创建一个 AppConfig
为其中一个而重写 label
那里。然后,您应该在代码引用此应用程序或其带有旧标签的模型的任何位置调整代码。
不能再通过不同的路径导入同一个模型两次。从django 1.6开始,只有手动将目录和子目录放置在 PYTHONPATH
. 请参阅 1.4 release notes 用于迁移说明。
您应确保:
所有模型都在中列出的应用程序中定义。 INSTALLED_APPS
或者有明确的 app_label
.
模型不会作为加载应用程序的副作用导入。具体来说,您不应该在应用程序的根模块或定义其配置类的模块中导入模型。
Django将在折旧期后执行1.9版的这些要求。
亚类 AppCommand
现在必须实现 handle_app_config()
方法而不是 handle_app()
. 此方法接收 AppConfig
实例而不是模型模块。
自从 INSTALLED_APPS
现在除了应用程序模块外,还支持应用程序配置类,您应该查看直接访问此设置的代码并使用应用程序注册表 (django.apps.apps
相反。
应用程序注册表保留了旧应用程序缓存的一些功能。即使应用程序缓存是一个私有API,过时的方法和参数也将通过标准取消预测路径删除,但以下更改立即生效的情况除外:
get_model
加薪 LookupError
而不是返回 None
找不到模型时。
这个 only_installed
的参数 get_model
和 get_models
不再存在,也不再存在 seed_cache
的参数 get_model
.
INSTALLED_APPS
¶当多个应用程序提供相同名称的管理命令时,Django将从最先进入的应用程序加载该命令。 INSTALLED_APPS
. 以前的版本从最后一个应用程序加载了该命令。
这使得管理命令的发现与Django的其他依赖于 INSTALLED_APPS
例如静态文件、模板和翻译。
ValidationError
建造和内部储存¶的行为 ValidationError
当构造函数接收到一个错误容器作为参数(例如 list
或 ErrorList
):
它将找到的任何字符串转换为 ValidationError
在将它们添加到其内部存储之前。
它不存储给定的容器,而是将其内容复制到自己的内部存储;以前容器本身被添加到 ValidationError
实例并用作内部存储。
这意味着如果您访问 ValidationError
内部存储,如 error_list
; error_dict
;或 update_error_dict()
您可以找到 ValidationError
您以前可以在其中找到字符串。
另外,如果您直接分配的返回值 update_error_dict()
至 Form._errors
您可能会无意中添加 list
的情况 ErrorList
预计会有实例。这是一个问题,因为与简单的 list
,一个 ErrorList
知道如何处理 ValidationError
。
大多数使用这些私有API的用例现在都包含在新引入的 Form.add_error()
方法:
# Old pattern:
try:
...
except ValidationError as e:
self._errors = e.update_error_dict(self._errors)
# New pattern:
try:
...
except ValidationError as e:
self.add_error(None, e)
如果需要django<=1.6和1.7兼容性,则不能使用 Form.add_error()
因为它在Django 1.7之前是不可用的,但是您可以使用以下变通方法来转换任何 list
进入之内 ErrorList
::
try:
...
except ValidationError as e:
self._errors = e.update_error_dict(self._errors)
# Additional code to ensure ``ErrorDict`` is exclusively
# composed of ``ErrorList`` instances.
for field, error_list in self._errors.items():
if not isinstance(error_list, self.error_class):
self._errors[field] = self.error_class(error_list)
LocMemCache
关于pickle错误¶Django以前的版本中存在一个不一致的问题,即不同的缓存后端如何处理pickle错误。 django.core.cache.backends.locmem.LocMemCache
用于在发生此类错误时自动失败,这与其他后端不一致并导致缓存特定错误。这已在Django 1.7中修复,请参见 #21200 了解更多详细信息。
Django的早期版本使用请求的路径和查询字符串生成缓存键,但不使用方案或主机。如果Django应用程序正在服务多个子域或域,则缓存键可能会发生冲突。在Django1.7中,缓存键随请求的绝对URL而变化,包括方案、主机、路径和查询字符串。例如,缓存键的URL部分现在是从 https://www.example.com/path/to/?key=val
而不是 /path/to/?key=val
. django 1.7生成的缓存键与旧版本django生成的键不同。升级到django 1.7之后,对任何先前缓存的URL的第一个请求将是缓存未命中。
None
到 Manager.db_manager()
¶在Django的早期版本中,可以使用 db_manager(using=None)
在模型管理器实例上使用默认路由行为获取管理器实例,覆盖任何手动指定的数据库路由。在Django 1.7中,值为 None
传递给数据库管理器将生成一个路由器 保留 任何手动分配的数据库路由--管理器将 not 重置。这对于解决路由信息在联接上的级联方式的不一致性是必要的。见 #13724 了解更多详细信息。
pytz
可能需要¶如果您的项目处理1970年之前或2037年之后的日期时间,而Django引发 ValueError
遇到它们时,您必须安装 pytz 。如果您使用Django的时区相关日期格式或 django.contrib.syndication
。
历史上,django管理站点将未经授权或未经身份验证的用户的请求直接传递到登录视图,而不进行HTTP重定向。在Django 1.7中,此行为已更改为符合更传统的工作流,其中任何未经授权的对管理页的请求都将被重定向(通过HTTP状态代码302)到登录页,并使用 next
参数设置为引用路径。成功登录后,用户将被重定向到那里。
还请注意,管理员登录表单已更新为不包含 this_is_the_login_form
字段(现在未使用)和 ValidationError
代码已设置为更规则的 invalid_login
关键。
select_for_update()
需要一个事务¶历史上,使用 select_for_update()
可以在事务外的自动提交模式下执行。在django 1.6之前,django的自动事务模式允许使用它锁定记录,直到下一次写入操作。Django1.6引入了数据库级的自动提交;从那时起,在这样的上下文中执行会使 select_for_update()
. 因此,现在假定它是一个错误并引发异常。
之所以进行此更改,是因为这些错误可能是由包含预期全局事务的应用程序(例如 ATOMIC_REQUESTS
设置为 True
或者Django以前的自动提交行为,在没有它们的情况下运行的项目中;而且,这些错误可能表现为数据损坏错误。它也是在姜戈1.6.3制造的。
如果您使用 select_for_update()
在属于的子类的测试类中 TransactionTestCase
而不是 TestCase
.
MIDDLEWARE_CLASSES
¶这个 app-loading refactor 不推荐使用不属于 INSTALLED_APPS
设置。这暴露了默认 INSTALLED_APPS
和 MIDDLEWARE_CLASSES
在全局默认值中 (django.conf.global_settings
)为了使这些设置同步并防止在使用最小设置测试可重用应用程序时出现拒绝警告, SessionMiddleware
, AuthenticationMiddleware
和 MessageMiddleware
已从默认值中删除。这些类仍将包含在由 startproject
. 大多数项目不会受到此更改的影响,但如果您以前没有声明 MIDDLEWARE_CLASSES
在项目设置和依赖全局默认设置时,应确保新默认值符合项目的需要。您还应该检查是否有任何代码可以访问 django.conf.global_settings.MIDDLEWARE_CLASSES
直接。
这个 django.core.files.uploadhandler.FileUploadHandler.new_file()
方法现在传递了一个附加的 content_type_extra
参数。如果你有一个习惯 FileUploadHandler
那工具 new_file()
,确保它接受此新参数。
ModelFormSet
在下列情况下不再删除实例 save(commit=False)
被称为。见 can_delete
有关如何从已删除表单中手动删除对象的说明。
装载空夹具会发出 RuntimeWarning
而不是提高 CommandError
.
django.contrib.staticfiles.views.serve()
现在将提高 Http404
异常而不是 ImproperlyConfigured
什么时候? DEBUG
是 False
. 此更改消除了有条件地将视图添加到根urlconf的需要,这反过来使按名称进行反向操作更加安全。它还消除了访问者通过请求不存在或尚未收集的静态文件来生成虚假HTP500错误的能力。
这个 django.db.models.Model.__eq__()
方法现在的定义方式是,当主键匹配时,代理模型的实例与其基础模型被认为是相等的。以前只有完全相同类的实例在主键匹配时被认为是相等的。
这个 django.db.models.Model.__eq__()
方法已更改,因此 Model
没有主键值的实例将被视为不相等(除非它们是相同的实例)。
这个 django.db.models.Model.__hash__()
方法现在将提升 TypeError
在没有主键值的实例上调用时。这样做是为了避免易变 __hash__
容器中的值。
AutoField
现在将使用 AUTOINCREMENT
选项,保证单调递增。这将导致在sqlite上更改主键编号行为,从而与大多数其他SQL数据库保持一致。这只适用于新创建的表。如果您有一个使用旧版本的django创建的数据库,则需要迁移它以利用此功能。例如,可以执行以下操作:
django.contrib.auth.models.AbstractUser
不再定义 get_absolute_url()
方法。返回旧定义 "/users/%s/" % urlquote(self.username)
这是任意的,因为应用程序可以或不可以在 urlpatterns
. 定义一个 get_absolute_url()
自定义用户对象上的方法或使用 ABSOLUTE_URL_OVERRIDES
如果你想为你的用户提供一个网址。
静态资产服务功能 django.test.LiveServerTestCase
课程已经简化:现在它只能提供已经存在的内容 STATIC_ROOT
测试运行时。透明地服务于所有静态资产的能力(类似于 DEBUG = True
在开发阶段)被转移到了一个新的阶级 staticfiles
应用程序(实际负责此功能的应用程序): django.contrib.staticfiles.testing.StaticLiveServerTestCase
. 换言之, LiveServerTestCase
它的力量不那么强大,但同时魔法也更少。
基本原理是消除非控制代码对控制应用程序的依赖性。
旧的缓存URI语法(例如 "locmem://"
)不再支持。它仍然有效,即使它没有记录或官方支持。如果您仍在使用它,请更新到当前 CACHES
语法。
默认的顺序 Form
继承的字段已更改为遵循正常的python mro。现在,通过反向迭代MRO发现字段,最顶层的类排在最后。只有当您在当前类上定义字段时,依赖默认字段顺序时,这才会影响您。 and 在父母身上 Form
.
这个 required
的参数 SelectDateWidget
已删除。这个小部件现在尊重表单域的 is_required
属性和其他小部件一样。
Widget.is_hidden
现在是只读属性,通过内省 input_type == 'hidden'
.
select_related()
现在像其他类似的调用一样连锁 prefetch_related
. 也就是说, select_related('foo', 'bar')
等于 select_related('foo').select_related('bar')
. 以前,后者相当于 select_related('bar')
.
geodjango放弃了对geos<3.1的支持。
这个 init_connection_state
数据库后端方法现在以自动提交模式执行(除非 AUTOCOMMIT
到 False
)如果维护自定义数据库后端,则应检查该方法。
这个 django.db.backends.BaseDatabaseFeatures.allows_primary_key_0
属性已重命名为 allows_auto_pk_0
更好地描述它。它是 True
对于django中包含的所有数据库后端,mysql除外,它允许使用值为0的主键。它只是禁止 自动增量 值为0的主键。
禁止隐藏父模型中定义的模型字段,因为这会在预期的模型行为中造成歧义。此外,模型继承层次结构中的冲突字段会导致系统检查错误。例如,如果使用多继承,则需要在父模型上定义自定义主键字段,否则将使用默认值 id
字段将发生冲突。见 多重继承 有关详细信息。
django.utils.translation.parse_accept_lang_header()
现在返回小写区域设置,而不是提供的大小写。由于应将区域设置视为不区分大小写,这允许我们加快区域设置检测。
django.utils.translation.get_language_from_path()
和 django.utils.translation.trans_real.get_supported_language_variant()
现在不再有了 supported
参数。
这个 shortcut
视图 django.contrib.contenttypes.views
现在支持协议相关的URL(例如 //example.com
)
GenericRelation
现在支持可选 related_query_name
参数。设置 related_query_name
将相关对象的关系添加回内容类型,以便进行筛选、排序和其他查询操作。
在PostgreSQL上运行测试时, USER
需要对内置的 postgres
数据库。这代替了以前连接到实际非测试数据库的行为。
作为 System check framework , fields, models, and model managers 全部实施 check()
在检查框架中注册的方法。如果有一个现有方法调用 check()
在其中一个对象上,您需要重命名它。
如上文“次要功能”的“缓存”部分所述,定义 TIMEOUT
论证 CACHES
设置为 None
将缓存键设置为“非过期”。以前,在memcache后端, TIMEOUT
属于 0
将设置非过期密钥,但这与的设置和过期(即无缓存)行为不一致 set("key", "value", timeout=0)
. 如果您需要非过期密钥,请更新您的设置以使用 None
而不是 0
因为后者现在也在设置中指定set和expire。
这个 sql*
管理指挥部现在尊重 allow_migrate()
方法 DATABASE_ROUTERS
. 如果模型与非默认数据库同步,请使用 --database
获取这些模型的SQL的标志(以前它们总是包含在输出中)。
当输入的utf-8无效时,从URL解码查询字符串现在返回到ISO-8859-1编码。
加上 django.contrib.auth.middleware.SessionAuthenticationMiddleware
对于默认项目模板(仅限1.7.2之前版本),在使用 runserver
.
添加 schemes
参数 URLValidator
如果以前使用自定义正则表达式验证方案,则将显示为向后不兼容的更改。中未列出的任何方案 schemes
验证失败,即使正则表达式与给定的URL匹配。
django.core.cache.get_cache
¶django.core.cache.get_cache
已被取代 django.core.cache.caches
.
django.utils.dictconfig
/django.utils.importlib
¶django.utils.dictconfig
和 django.utils.importlib
分别是 logging.config
和 importlib
为2.7之前的python版本提供。他们被否决了。
django.utils.module_loading.import_by_path
¶django.utils.module_loading.import_by_path
函数捕获 AttributeError
, ImportError
和 ValueError
例外,并重新提出 ImproperlyConfigured
. 这种异常屏蔽使得诊断循环导入问题变得不必要,因为它使问题看起来像是来自Django内部。它已被弃用,取而代之的是 import_string()
.
django.utils.tzinfo
¶django.utils.tzinfo
提供两个 tzinfo
子类, LocalTimezone
和 FixedOffset
. 他们已经被否决了,赞成由 django.utils.timezone
, django.utils.timezone.get_default_timezone()
和 django.utils.timezone.get_fixed_timezone()
.
django.utils.unittest
¶django.utils.unittest
提供统一的访问权限 unittest2
所有Python版本的库。自从 unittest2
成为标准类库的 unittest
python 2.7和django 1.7中的模块不再支持旧的python版本,这个模块不再有用。它已被弃用。使用 unittest
相反。
django.utils.datastructures.SortedDict
¶AS OrderedDict
在python 2.7中添加到标准库, SortedDict
不再需要,已被弃用。
由提供的另外两个不推荐使用的方法 SortedDict
(insert()
和 value_for_index()
)已被删除。如果您依赖这些方法来改变像表单字段这样的结构,那么现在应该处理这些 OrderedDict
作为不可变对象,并重写它们以更改其内容。
例如,您可能希望重写 MyFormClass.base_fields
(尽管此属性不被视为公共API)更改所有字段的顺序 MyFormClass
实例;或者类似地,您可以重写 self.fields
从内部 MyFormClass.__init__()
,以更改特定表单实例的字段。例如(来自Django本身)::
PasswordChangeForm.base_fields = OrderedDict(
(k, PasswordChangeForm.base_fields[k])
for k in ["old_password", "new_password1", "new_password2"]
)
以前,如果模型组织在一个包中 (myapp/models/
)而不是简单的 myapp/models.py
,Django将在 myapp/models/sql/
. 此错误已被修复,因此Django将搜索 myapp/sql/
记录在案。在解决了这个问题之后,添加了迁移,这将取消对初始SQL数据的预测。因此,尽管这种变化仍然存在,但由于整个特性将在Django 1.9中被删除,因此取消预测是不相关的。
django.contrib.sites
¶django.contrib.sites
当它不在时提供的功能会减少 INSTALLED_APPS
. 应用程序加载重构在这种情况下添加了一些约束。因此,移动了两个对象,不推荐使用旧位置:
RequestSite
现在生活在 django.contrib.sites.requests
.
get_current_site()
现在生活在 django.contrib.sites.shortcuts
.
declared_fieldsets
attribute on ModelAdmin
¶ModelAdmin.declared_fieldsets
已弃用。尽管它是一个私有的API,但它将经历一个常规的拒绝路径。该属性主要由绕过 ModelAdmin.get_fieldsets()
但这被认为是一个错误,并已得到解决。
django.contrib.contenttypes
¶自从 django.contrib.contenttypes.generic
定义了管理和模型相关的对象,导入此模块可能会触发意外的副作用。因此,它的内容被分成 contenttypes
子模块和 django.contrib.contenttypes.generic
模块已弃用:
syncdb
¶这个 syncdb
命令已被弃用,取而代之的是 migrate
命令。 migrate
采用与 syncdb
以前经常加上一些,所以只需更改您所调用的名字就可以了,其他的什么都没有。
util
modules renamed to utils
¶以下实例 util.py
在Django代码库中已重命名为 utils.py
为了统一所有的util和utils引用:
django.contrib.admin.util
django.contrib.gis.db.backends.util
django.db.backends.util
django.forms.util
get_formsets
method on ModelAdmin
¶ModelAdmin.get_formsets
已弃用,取而代之的是新的 get_formsets_with_inlines()
,以便更好地处理在 ModelAdmin
.
IPAddressField
¶这个 django.db.models.IPAddressField
和 django.forms.IPAddressField
字段已被弃用,取而代之的是 django.db.models.GenericIPAddressField
和 django.forms.GenericIPAddressField
.
BaseMemcachedCache._get_memcache_timeout
方法¶这个 BaseMemcachedCache._get_memcache_timeout()
方法已重命名为 get_backend_timeout()
. 尽管它是一个私有的API,但它将经历正常的降级。
这个 --natural
和 -n
选项 dumpdata
已弃用。使用 dumpdata --natural-foreign
相反。
同样, use_natural_keys
的参数 serializers.serialize()
已弃用。使用 use_natural_foreign_keys
相反。
POST
和 GET
论证 WSGIRequest.REQUEST
¶已经强烈建议您使用 GET
和 POST
而不是 REQUEST
因为前者更明确。财产 REQUEST
已弃用,将在Django 1.9中删除。
django.utils.datastructures.MergeDict
类¶MergeDict
主要用于支持合并 POST
和 GET
变元为 REQUEST
属性对 WSGIRequest
. 要合并词典,请使用 dict.update()
相反。类 MergeDict
已弃用,将在Django 1.9中删除。
zh-cn
, zh-tw
和 fy-nl
¶目前使用的简体中文语言代码 zh-cn
,繁体中文 zh-tw
和(西方)弗莱西 fy-nl
已弃用,应替换为语言代码 zh-hans
, zh-hant
和 fy
分别。如果使用这些语言代码,则应重命名区域设置目录并更新设置以反映这些更改。不推荐使用的语言代码将在Django 1.9中删除。
django.utils.functional.memoize
功能¶该功能 memoize
已弃用,应替换为 functools.lru_cache
装饰器(从Python3.2开始提供)。
Django为旧的python版本提供了这个修饰符的一个后端口,它可以在 django.utils.lru_cache.lru_cache
. 不推荐使用的函数将在Django 1.9中删除。
谷歌已经退出了对地理位置图格式的支持。因此,Django对地理位置图的支持被弃用,将在Django 1.8中删除。
查询集的可调用参数是不可靠的未记录功能。它已被弃用,将在Django 1.9中删除。
可调用参数是在构造查询集而不是在对其进行评估时进行评估的,因此,与将参数传递给查询集之前对参数进行评估相比,此功能没有提供任何好处,并造成混淆,即参数可能是在查询时进行评估的。
ADMIN_FOR
设置¶这个 ADMIN_FOR
管理员文档的一部分功能已被删除。您可以在方便时从配置中删除设置。
SplitDateTimeWidget
with DateTimeField
¶SplitDateTimeWidget
支持 DateTimeField
已弃用,请使用 SplitDateTimeWidget
具有 SplitDateTimeField
相反。
validate
¶这个 validate
管理命令已弃用,取而代之的是 check
命令。
django.core.management.BaseCommand
¶requires_model_validation
已弃用,取而代之的是新的 requires_system_checks
标识。如果缺少后一个标志,则使用前一个标志的值。定义两者 requires_system_checks
和 requires_model_validation
导致错误。
这个 check()
方法已替换旧的 validate()
方法。
ModelAdmin
验证器¶这个 ModelAdmin.validator_class
和 default_validator_class
属性已弃用,取而代之的是新的 checks_class
属性。
这个 ModelAdmin.validate()
方法已弃用,取而代之的是 ModelAdmin.check()
.
这个 django.contrib.admin.validation
模块已弃用。
django.db.backends.DatabaseValidation.validate_field
¶此方法已弃用,取而代之的是新的 check_field
方法。所需的功能 check_field()
与提供的相同 validate_field()
但输出格式不同。需要此功能的第三方数据库后端应提供 check_field()
.
django.utils.text.javascript_quote
¶javascript_quote()
中是否存在未记录的函数 django.utils.text
. 它在内部使用 javascript_catalog()
视图其实现已更改以使用 json.dumps()
相反。如果依赖此函数从不受信任的字符串提供安全输出,则应使用 django.utils.html.escapejs
或 escapejs
模板筛选器。如果您所需要的只是生成有效的javascript字符串,那么只需使用 json.dumps()
.
fix_ampersands
utils方法和模板过滤器¶这个 django.utils.html.fix_ampersands
方法与 fix_ampersands
模板过滤器被弃用,因为django的标准HTML转义功能已经处理了与符号的转义。将此与 fix_ampersands
可能会导致双重转义,或者,如果假定输出是安全的,则有引入XSS漏洞的风险。随着 fix_ampersands
, django.utils.html.clean_html
已弃用,是一个未记录的函数,它调用 fix_ampersands
. 由于这是一种加速折旧, fix_ampersands
和 clean_html
将在Django 1.8中移除。
所有数据库设置 TEST_
前缀已弃用,取而代之的是 TEST
数据库设置中的字典。在Django 1.9之前,将支持旧设置。为了与旧版本的django向后兼容,您可以定义两个版本的设置,只要它们匹配。
通过 runfcgi
管理命令将在Django 1.9中删除。请使用wsgi部署您的项目。
contrib.sites
¶在应用程序加载重构之后,中的两个对象 django.contrib.sites.models
需要移动,因为它们必须在不导入的情况下可用 django.contrib.sites.models
什么时候? django.contrib.sites
未安装。进口 RequestSite
从 django.contrib.sites.requests
和 get_current_site()
从 django.contrib.sites.shortcuts
. 旧的进口地点将一直工作到Django 1.9。
django.forms.forms.get_declared_fields()
¶Django不再在内部使用此功能。即使它是一个私有的API,它也会经历正常的折旧周期。
专用API django.db.models.sql.where.WhereNode.make_atom()
和 django.db.models.sql.where.Constraint
为支持新的 custom lookups API .
这些功能已达到其折旧周期的末尾,并在Django 1.7中删除。见 1.5中不推荐的功能 有关详细信息,包括如何删除这些功能的用法。
django.utils.simplejson
被移除。
django.utils.itercompat.product
被移除。
已安装的应用程序和模板目录不再从普通字符串更正为元组。
HttpResponse
, SimpleTemplateResponse
, TemplateResponse
, render_to_response()
, index()
和 sitemap()
不再需要 mimetype
参数
HttpResponse
如果它是迭代器,则立即使用其内容。
这个 AUTH_PROFILE_MODULE
设置,以及 get_profile()
删除用户模型上的方法。
这个 cleanup
删除管理命令。
这个 daily_cleanup.py
脚本已删除。
select_related()
不再拥有 depth
关键字参数。
这个 get_warnings_state()
/restore_warnings_state()
功能从 django.test.utils
以及 save_warnings_state()
/ restore_warnings_state()
django.test.*TestCase 被移除。
这个 check_for_test_cookie
方法在 AuthenticationForm
被移除。
版本 django.contrib.auth.views.password_reset_confirm()
支持base36编码的用户ID (django.contrib.auth.views.password_reset_confirm_uidb36
被删除。
这个 django.utils.encoding.StrAndUnicode
混合被移除。
7月 22, 2024