===========================
Django Deprecation Timeline
===========================

This document outlines when various pieces of Django will be removed, following
their deprecation, as per the :ref:`Django deprecation policy
<internal-release-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 :mod:`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
          :doc:`messages framework </ref/contrib/messages>` 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 :class:`~django.test.client.Response`
          objects returned by the :ref:`test client <test-client>` has been
          deprecated since the 1.3 release. The
          :attr:`~django.test.client.Response.templates` attribute should be
          used instead.

        * The features of the :class:`django.test.simple.DjangoTestRunner`
          (including fail-fast and Ctrl-C test termination) can now be provided
          by the unittest-native :class:`TextTestRunner`. The
          :class:`~django.test.simple.DjangoTestRunner` will be removed in
          favor of using the unittest-native class.

        * The undocumented function
          :func:`django.contrib.formtools.utils.security_hash`
          is deprecated, in favor of :func:`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:

              * :mod:`django.views.generic.create_update`
              * :mod:`django.views.generic.date_based`
              * :mod:`django.views.generic.list_detail`
              * :mod:`django.views.generic.simple`

        * The :class:`~django.core.servers.basehttp.AdminMediaHandler` has
          been deprecated in favor of the
          :class:`~django.contrib.staticfiles.handlers.StaticFilesHandler`.

        * The :ttag:`url` and :ttag:`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 :djadmin:`reset` and :djadmin:`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.

        * :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise
          a :class:`~django.contrib.gis.geos.GEOSException` when called
          on a geometry with no SRID value.

        * :class:`~django.http.CompatCookie` will be removed in favor of
          :class:`~django.http.SimpleCookie`.

        * :class:`django.core.context_processors.PermWrapper` and
          :class:`django.core.context_processors.PermLookupDict`
          will be moved to :class:`django.contrib.auth.context_processors.PermWrapper`
          and :class:`django.contrib.auth.context_processors.PermLookupDict`,
          respectively.

        * The :setting:`MEDIA_URL` or :setting:`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.
