Django Deprecation Timeline
This document outlines when various pieces of Django will be removed, following
their deprecation, as per the Django deprecation policy
- 1.3
- AdminSite.root(). This release will remove the old method for
hooking up admin URLs. This has been deprecated since the 1.1
release.
- Authentication backends need to define the boolean attributes
supports_object_permissions and supports_anonymous_user.
The old backend style is deprecated since the 1.2 release.
- The django.contrib.gis.db.backend module, including the
SpatialBackend interface, is deprecated since the 1.2 release.
- 1.4
- CsrfResponseMiddleware. This has been deprecated since the 1.2
release, in favor of the template tag method for inserting the CSRF
token. CsrfMiddleware, which combines CsrfResponseMiddleware
and CsrfViewMiddleware, is also deprecated.
- The old imports for CSRF functionality (django.contrib.csrf.*),
which moved to core in 1.2, will be removed.
- SMTPConnection. The 1.2 release deprecated the SMTPConnection
class in favor of a generic E-mail backend API.
- The many to many SQL generation functions on the database backends
will be removed.
- The ability to use the DATABASE_* family of top-level settings to
define database connections will be removed.
- The ability to use shorthand notation to specify a database backend
(i.e., sqlite3 instead of django.db.backends.sqlite3) will be
removed.
- The get_db_prep_save, get_db_prep_value and
get_db_prep_lookup methods on Field were modified in 1.2
to support multiple databases. In 1.4, the support functions
that allow methods with the old prototype to continue
working will be removed.
- The Message model (in django.contrib.auth), its related
manager in the User model (user.message_set), and the
associated methods (user.message_set.create() and
user.get_and_delete_messages()), which have
been deprecated since the 1.2 release, will be removed. The
messages framework should be used
instead.
- Authentication backends need to support the obj parameter for
permission checking. The supports_object_permissions variable
is not checked any longer and can be removed.
- Authentication backends need to support the AnonymousUser
being passed to all methods dealing with permissions.
The supports_anonymous_user variable is not checked any
longer and can be removed.
- The ability to specify a callable template loader rather than a
Loader class will be removed, as will the load_template_source
functions that are included with the built in template loaders for
backwards compatibility. These have been deprecated since the 1.2
release.
- django.utils.translation.get_date_formats() and
django.utils.translation.get_partial_date_formats(). These
functions are replaced by the new locale aware formatting; use
django.utils.formats.get_format() to get the appropriate
formats.
- In django.forms.fields: DEFAULT_DATE_INPUT_FORMATS,
DEFAULT_TIME_INPUT_FORMATS and
DEFAULT_DATETIME_INPUT_FORMATS. Use
django.utils.formats.get_format() to get the appropriate
formats.
- The ability to use a function-based test runners will be removed,
along with the django.test.simple.run_tests() test runner.
- The views.feed() view and feeds.Feed class in
django.contrib.syndication have been deprecated since the 1.2
release. The class-based view views.Feed should be used instead.
- django.core.context_processors.auth. This release will
remove the old method in favor of the new method in
django.contrib.auth.context_processors.auth. This has been
deprecated since the 1.2 release.
- The postgresql database backend has been deprecated in favor of
the postgresql_psycopg2 backend.
- The no language code has been deprecated in favor of the nb
language code.
- Authentication backends need to define the boolean attribute
supports_inactive_user.
- django.db.models.fields.XMLField will be removed. This was
deprecated as part of the 1.3 release. An accelerated deprecation
schedule has been used because the field hasn’t performed any role
beyond that of a simple TextField since the removal of oldforms.
All uses of XMLField can be replaced with TextField.
- django.db.models.fields.URLField.verify_exists has been
deprecated due to intractable security and performance
issues. Validation behavior has been removed in 1.4, and the
argument will be removed in 1.5.
- 1.5
- The mod_python request handler has been deprecated since the 1.3
release. The mod_wsgi handler should be used instead.
- The template attribute on Response
objects returned by the test client has been
deprecated since the 1.3 release. The
templates attribute should be
used instead.
- The features of the django.test.simple.DjangoTestRunner
(including fail-fast and Ctrl-C test termination) can now be provided
by the unittest-native TextTestRunner. The
DjangoTestRunner will be removed in
favor of using the unittest-native class.
- The undocumented function
django.contrib.formtools.utils.security_hash()
is deprecated, in favor of django.contrib.formtools.utils.form_hmac()
- The function-based generic views have been deprecated in
favor of their class-based cousins. The following modules
will be removed:
- The AdminMediaHandler has
been deprecated in favor of the
StaticFilesHandler.
- The url and ssi template tags will be
modified so that the first argument to each tag is a
template variable, not an implied string. The new-style
behavior is provided in the future template tag library.
- The reset and sqlreset management commands
are deprecated.
- Authentication backends need to support a inactive user
being passed to all methods dealing with permissions.
The supports_inactive_user variable is not checked any
longer and can be removed.
- transform() will raise
a GEOSException when called
on a geometry with no SRID value.
- CompatCookie will be removed in favor of
SimpleCookie.
- django.core.context_processors.PermWrapper and
django.core.context_processors.PermLookupDict
will be moved to django.contrib.auth.context_processors.PermWrapper
and django.contrib.auth.context_processors.PermLookupDict,
respectively.
- The MEDIA_URL or STATIC_URL settings are
required to end with a trailing slash to ensure there is a consistent
way to combine paths in templates.
- 2.0
- django.views.defaults.shortcut(). This function has been moved
to django.contrib.contenttypes.views.shortcut() as part of the
goal of removing all django.contrib references from the core
Django codebase. The old shortcut will be removed in the 2.0
release.