2012-10-30 14:02:54 +01:00
|
|
|
============================================
|
|
|
|
Django 1.6 release notes - UNDER DEVELOPMENT
|
|
|
|
============================================
|
|
|
|
|
|
|
|
Welcome to Django 1.6!
|
|
|
|
|
|
|
|
These release notes cover the `new features`_, as well as some `backwards
|
|
|
|
incompatible changes`_ you'll want to be aware of when upgrading from Django
|
|
|
|
1.5 or older versions. We've also dropped some features, which are detailed in
|
|
|
|
:doc:`our deprecation plan </internals/deprecation>`, and we've `begun the
|
|
|
|
deprecation process for some features`_.
|
|
|
|
|
|
|
|
.. _`new features`: `What's new in Django 1.6`_
|
|
|
|
.. _`backwards incompatible changes`: `Backwards incompatible changes in 1.6`_
|
|
|
|
.. _`begun the deprecation process for some features`: `Features deprecated in 1.6`_
|
|
|
|
|
|
|
|
What's new in Django 1.6
|
|
|
|
========================
|
|
|
|
|
Simplified default project template.
Squashed commit of:
commit 508ec9144b35c50794708225b496bde1eb5e60aa
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 22:50:55 2013 +0100
Tweaked default settings file.
* Explained why BASE_DIR exists.
* Added a link to the database configuration options, and put it in its
own section.
* Moved sensitive settings that must be changed for production at the
top.
commit 6515fd2f1aa73a86dc8dbd2ccf512ddb6b140d57
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 14:35:21 2013 +0100
Documented the simplified app & project templates in the changelog.
commit 2c5b576c2ea91d84273a019b3d0b3b8b4da72f23
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 13:59:27 2013 +0100
Minor fixes in tutorials 5 and 6.
commit 55a51531be8104f21b3cca3f6bf70b0a7139a041
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 13:51:11 2013 +0100
Updated tutorial 2 for the new project template.
commit 29ddae87bdaecff12dd31b16b000c01efbde9e20
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 11:58:54 2013 +0100
Updated tutorial 1 for the new project template.
commit 0ecb9f6e2514cfd26a678a280d471433375101a3
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 11:29:13 2013 +0100
Adjusted the default URLconf detection to account for the admin.
It's now enabled by default.
commit 5fb4da0d3d09dac28dd94e3fde92b9d4335c0565
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 10:36:55 2013 +0100
Added security warnings for the most sensitive settings.
commit 718d84bd8ac4a42fb4b28ec93965de32680f091e
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 23:24:06 2013 +0100
Used an absolute path for the SQLite database.
This ensures the settings file works regardless of which directory
django-admin.py / manage.py is invoked from.
BASE_DIR got a +1 from a BDFL and another core dev. It doesn't involve
the concept of a "Django project"; it's just a convenient way to express
relative paths within the source code repository for non-Python files.
Thanks Jacob Kaplan-Moss for the suggestion.
commit 1b559b4bcda622e10909b68fe5cab90db6727dd9
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 23:22:40 2013 +0100
Removed STATIC_ROOT from the default settings template.
It isn't necessary in development, and it confuses beginners to no end.
Thanks Carl Meyer for the suggestion.
commit a55f141a500bb7c9a1bc259bbe1954c13b199671
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 23:21:43 2013 +0100
Removed MEDIA_ROOT/URL from default settings template.
Many sites will never deal with user-uploaded files, and MEDIA_ROOT is
complicated to explain.
Thanks Carl Meyer for the suggestion.
commit 44bf2f2441420fd9429ee9fe1f7207f92dd87e70
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 22:22:09 2013 +0100
Removed logging config.
This configuration is applied regardless of the value of LOGGING;
duplicating it in LOGGING is confusing.
commit eac747e848eaed65fd5f6f254f0a7559d856f88f
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 22:05:31 2013 +0100
Enabled the locale middleware by default.
USE_I18N is True by default, and doesn't work well without
LocaleMiddleware.
commit d806c62b2d00826dc2688c84b092627b8d571cab
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 22:03:16 2013 +0100
Enabled clickjacking protection by default.
commit 99152c30e6a15003f0b6737dc78e87adf462aacb
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 22:01:48 2013 +0100
Reorganized settings in logical sections, and trimmed comments.
commit d37ffdfcb24b7e0ec7cc113d07190f65fb12fb8a
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:54:11 2013 +0100
Avoided misleading TEMPLATE_DEBUG = DEBUG.
According to the docs TEMPLATE_DEBUG works only when DEBUG = True.
commit 15d9478d3a9850e85841e7cf09cf83050371c6bf
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:46:25 2013 +0100
Removed STATICFILES_FINDERS/TEMPLATE_LOADERS from default settings file.
Only developers with special needs ever need to change these settings.
commit 574da0eb5bfb4570883756914b4dbd7e20e1f61e
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:45:01 2013 +0100
Removed STATICFILES/TEMPLATES_DIRS from default settings file.
The current best practice is to put static files and templates in
applications, for easier testing and deployment.
commit 8cb18dbe56629aa1be74718a07e7cc66b4f9c9f0
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:24:16 2013 +0100
Removed settings related to email reporting from default settings file.
While handy for small scale projects, it isn't exactly a best practice.
commit 8ecbfcb3638058f0c49922540f874a7d802d864f
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 18:54:43 2013 +0100
Documented how to enable the sites framework.
commit 23fc91a6fa67d91ddd9d71b1c3e0dc26bdad9841
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:28:59 2013 +0100
Disabled the sites framework by default.
RequestSite does the job for single-domain websites.
commit c4d82eb8afc0eb8568bf9c4d12644272415e3960
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Tue Jan 29 00:08:33 2013 +0100
Added a default admin.py to the application template.
Thanks Ryan D Hiebert for the suggestion.
commit 4071dc771e5c44b1c5ebb9beecefb164ae465e22
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 10:59:49 2013 +0100
Enabled the admin by default.
Everyone uses the admin.
commit c807a31f8d89e7e7fd97380e3023f7983a8b6fcb
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 10:57:05 2013 +0100
Removed admindocs from default project template.
commit 09e4ce0e652a97da1a9e285046a91c8ad7a9189c
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:32:52 2013 +0100
Added links to the settings documentation.
commit 5b8f5eaef364eb790fcde6f9e86f7d266074cca8
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 11:06:54 2013 +0100
Used a significant example for URLconf includes.
commit 908e91d6fcee2a3cb51ca26ecdf12a6a24e69ef8
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 16:22:31 2013 +0100
Moved code comments about WSGI to docs, and rewrote said docs.
commit 50417e51996146f891d08ca8b74dcc736a581932
Author: Aymeric Augustin <aymeric.augustin@m4x.org>
Date: Mon Jan 28 15:51:50 2013 +0100
Normalized the default application template.
Removed the default test that 1 + 1 = 2, because it's been committed
way too many times, in too many projects.
Added an import of `render` for views, because the first view will
often be:
def home(request):
return render(request, "mysite/home.html")
2013-01-28 15:51:50 +01:00
|
|
|
Simplified default project and app templates
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The default templates used by :djadmin:`startproject` and :djadmin:`startapp`
|
|
|
|
have been simplified and modernized. The :doc:`admin
|
|
|
|
</ref/contrib/admin/index>` is now enabled by default in new projects; the
|
|
|
|
:doc:`sites </ref/contrib/sites>` framework no longer is. :ref:`Language
|
|
|
|
detection <how-django-discovers-language-preference>` and :ref:`clickjacking
|
|
|
|
prevention <clickjacking-prevention>` are turned on.
|
|
|
|
|
|
|
|
If the default templates don't suit your tastes, you can use :ref:`custom
|
|
|
|
project and app templates <custom-app-and-project-templates>`.
|
|
|
|
|
2013-02-10 16:15:49 +01:00
|
|
|
Time zone aware aggregation
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The support for :doc:`time zones </topics/i18n/timezones>` introduced in
|
|
|
|
Django 1.4 didn't work well with :meth:`QuerySet.dates()
|
|
|
|
<django.db.models.query.QuerySet.dates>`: aggregation was always performed in
|
|
|
|
UTC. This limitation was lifted in Django 1.6. Use :meth:`QuerySet.datetimes()
|
|
|
|
<django.db.models.query.QuerySet.datetimes>` to perform time zone aware
|
|
|
|
aggregation on a :class:`~django.db.models.DateTimeField`.
|
|
|
|
|
2012-11-17 20:24:54 +01:00
|
|
|
Minor features
|
|
|
|
~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* Authentication backends can raise ``PermissionDenied`` to immediately fail
|
|
|
|
the authentication chain.
|
|
|
|
|
2013-02-07 09:48:08 +01:00
|
|
|
* The HttpOnly flag can be set on the CSRF cookie with
|
|
|
|
:setting:`CSRF_COOKIE_HTTPONLY`.
|
|
|
|
|
2012-12-13 12:33:11 +01:00
|
|
|
* The ``assertQuerysetEqual()`` now checks for undefined order and raises
|
|
|
|
``ValueError`` if undefined order is spotted. The order is seen as
|
|
|
|
undefined if the given ``QuerySet`` isn't ordered and there are more than
|
|
|
|
one ordered values to compare against.
|
|
|
|
|
2013-01-12 09:37:19 +01:00
|
|
|
* Added :meth:`~django.db.models.query.QuerySet.earliest` for symmetry with
|
|
|
|
:meth:`~django.db.models.query.QuerySet.latest`.
|
|
|
|
|
2013-02-10 16:15:49 +01:00
|
|
|
* In addition to :lookup:`year`, :lookup:`month` and :lookup:`day`, the ORM
|
|
|
|
now supports :lookup:`hour`, :lookup:`minute` and :lookup:`second` lookups.
|
|
|
|
|
2013-02-23 09:45:56 +01:00
|
|
|
* The default widgets for :class:`~django.forms.EmailField`,
|
|
|
|
:class:`~django.forms.URLField`, :class:`~django.forms.IntegerField`,
|
|
|
|
:class:`~django.forms.FloatField` and :class:`~django.forms.DecimalField` use
|
|
|
|
the new type attributes available in HTML5 (type='email', type='url',
|
|
|
|
type='number'). Note that due to erratic support of the ``number`` input type
|
|
|
|
with localized numbers in current browsers, Django only uses it when numeric
|
|
|
|
fields are not localized.
|
2013-01-28 14:12:56 +01:00
|
|
|
|
2013-01-30 20:28:16 +01:00
|
|
|
* The ``number`` argument for :ref:`lazy plural translations
|
|
|
|
<lazy-plural-translations>` can be provided at translation time rather than
|
|
|
|
at definition time.
|
|
|
|
|
2013-02-04 12:55:45 +01:00
|
|
|
* For custom management commands: Verification of the presence of valid
|
|
|
|
settings in commands that ask for it by using the
|
2013-02-04 00:53:48 +01:00
|
|
|
:attr:`~django.core.management.BaseCommand.can_import_settings` internal
|
2013-02-04 12:55:45 +01:00
|
|
|
option is now performed independently from handling of the locale that
|
|
|
|
should be active during the execution of the command. The latter can now be
|
|
|
|
influenced by the new
|
|
|
|
:attr:`~django.core.management.BaseCommand.leave_locale_alone` internal
|
|
|
|
option. See :ref:`management-commands-and-locales` for more details.
|
2013-02-04 00:53:48 +01:00
|
|
|
|
2013-02-11 08:39:14 +01:00
|
|
|
* The :attr:`~django.views.generic.edit.DeletionMixin.success_url` of
|
|
|
|
:class:`~django.views.generic.edit.DeletionMixin` is now interpolated with
|
|
|
|
its ``object``\'s ``__dict__``.
|
|
|
|
|
2013-02-13 09:55:43 +01:00
|
|
|
* :class:`~django.http.HttpResponseRedirect` and
|
|
|
|
:class:`~django.http.HttpResponsePermanentRedirect` now provide an ``url``
|
|
|
|
attribute (equivalent to the URL the response will redirect to).
|
|
|
|
|
2013-02-24 13:36:04 +01:00
|
|
|
* The ``MemcachedCache`` cache backend now uses the latest :mod:`pickle`
|
|
|
|
protocol available.
|
|
|
|
|
2013-02-20 20:27:32 +01:00
|
|
|
* Added the :attr:`django.db.models.ForeignKey.db_constraint`
|
|
|
|
option.
|
|
|
|
|
2013-02-22 21:52:20 +01:00
|
|
|
* The jQuery library embedded in the admin has been upgraded to version 1.9.1.
|
|
|
|
|
2012-10-30 14:02:54 +01:00
|
|
|
Backwards incompatible changes in 1.6
|
|
|
|
=====================================
|
|
|
|
|
2012-10-23 23:04:37 +02:00
|
|
|
* The ``django.db.models.query.EmptyQuerySet`` can't be instantiated any more -
|
|
|
|
it is only usable as a marker class for checking if
|
|
|
|
:meth:`~django.db.models.query.QuerySet.none` has been called:
|
|
|
|
``isinstance(qs.none(), EmptyQuerySet)``
|
|
|
|
|
2013-02-10 16:15:49 +01:00
|
|
|
* :meth:`QuerySet.dates() <django.db.models.query.QuerySet.dates>` raises an
|
|
|
|
error if it's used on :class:`~django.db.models.DateTimeField` when time
|
|
|
|
zone support is active. Use :meth:`QuerySet.datetimes()
|
|
|
|
<django.db.models.query.QuerySet.datetimes>` instead.
|
|
|
|
|
|
|
|
* :meth:`QuerySet.dates() <django.db.models.query.QuerySet.dates>` returns a
|
|
|
|
list of :class:`~datetime.date`. It used to return a list of
|
|
|
|
:class:`~datetime.datetime`.
|
|
|
|
|
|
|
|
* The :attr:`~django.contrib.admin.ModelAdmin.date_hierarchy` feature of the
|
|
|
|
admin on a :class:`~django.db.models.DateTimeField` requires time zone
|
|
|
|
definitions in the database when :setting:`USE_TZ` is ``True``.
|
|
|
|
:ref:`Learn more <database-time-zone-definitions>`.
|
|
|
|
|
|
|
|
* Accessing ``date_list`` in the context of a date-based generic view requires
|
|
|
|
time zone definitions in the database when the view is based on a
|
|
|
|
:class:`~django.db.models.DateTimeField` and :setting:`USE_TZ` is ``True``.
|
|
|
|
:ref:`Learn more <database-time-zone-definitions>`.
|
|
|
|
|
|
|
|
* Model fields named ``hour``, ``minute`` or ``second`` may clash with the new
|
|
|
|
lookups. Append an explicit :lookup:`exact` lookup if this is an issue.
|
|
|
|
|
2013-01-28 14:12:56 +01:00
|
|
|
* If your CSS/Javascript code used to access HTML input widgets by type, you
|
|
|
|
should review it as ``type='text'`` widgets might be now output as
|
2013-02-23 09:45:56 +01:00
|
|
|
``type='email'``, ``type='url'`` or ``type='number'`` depending on their
|
|
|
|
corresponding field type.
|
2013-01-28 14:12:56 +01:00
|
|
|
|
2013-01-20 19:07:10 +01:00
|
|
|
* Extraction of translatable literals from templates with the
|
|
|
|
:djadmin:`makemessages` command now correctly detects i18n constructs when
|
|
|
|
they are located after a ``{#`` / ``#}``-type comment on the same line. E.g.:
|
|
|
|
|
|
|
|
.. code-block:: html+django
|
|
|
|
|
|
|
|
{# A comment #}{% trans "This literal was incorrectly ignored. Not anymore" %}
|
|
|
|
|
|
|
|
* (Related to the above item.) Validation of the placement of
|
|
|
|
:ref:`translator-comments-in-templates` specified using ``{#`` / ``#}`` is now
|
|
|
|
stricter. All translator comments not located at the end of their respective
|
|
|
|
lines in a template are ignored and a warning is generated by
|
|
|
|
:djadmin:`makemessages` when it finds them. E.g.:
|
|
|
|
|
|
|
|
.. code-block:: html+django
|
|
|
|
|
|
|
|
{# Translators: This is ignored #}{% trans "Translate me" %}
|
|
|
|
{{ title }}{# Translators: Extracted and associated with 'Welcome' below #}
|
|
|
|
<h1>{% trans "Welcome" %}</h1>
|
|
|
|
|
2013-02-24 13:20:41 +01:00
|
|
|
* The :doc:`comments </ref/contrib/comments/index>` app now uses a ``GenericIPAddressField``
|
|
|
|
for storing commenters' IP addresses, to support comments submitted from IPv6 addresses.
|
|
|
|
Until now, it stored them in an ``IPAddressField``, which is only meant to support IPv4.
|
|
|
|
When saving a comment made from an IPv6 address, the address would be silently truncated
|
|
|
|
on MySQL databases, and raise an exception on Oracle.
|
|
|
|
You will need to change the column type in your database to benefit from this change.
|
|
|
|
|
|
|
|
For MySQL, execute this query on your project's database:
|
|
|
|
|
|
|
|
.. code-block:: sql
|
|
|
|
|
|
|
|
ALTER TABLE django_comments MODIFY ip_address VARCHAR(39);
|
|
|
|
|
|
|
|
For Oracle, execute this query:
|
|
|
|
|
|
|
|
.. code-block:: sql
|
|
|
|
|
|
|
|
ALTER TABLE DJANGO_COMMENTS MODIFY (ip_address VARCHAR2(39));
|
|
|
|
|
|
|
|
If you do not apply this change, the behaviour is unchanged: on MySQL, IPv6 addresses
|
|
|
|
are silently truncated; on Oracle, an exception is generated. No database
|
|
|
|
change is needed for SQLite or PostgreSQL databases.
|
|
|
|
|
|
|
|
|
2012-10-30 14:02:54 +01:00
|
|
|
.. warning::
|
|
|
|
|
|
|
|
In addition to the changes outlined in this section, be sure to review the
|
|
|
|
:doc:`deprecation plan </internals/deprecation>` for any features that
|
|
|
|
have been removed. If you haven't updated your code within the
|
|
|
|
deprecation timeline for a given feature, its removal may appear as a
|
|
|
|
backwards incompatible change.
|
|
|
|
|
|
|
|
Features deprecated in 1.6
|
|
|
|
==========================
|
2013-01-01 22:28:48 +01:00
|
|
|
|
2013-02-23 15:07:21 +01:00
|
|
|
Changes to :ttag:`cycle` and :ttag:`firstof`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
The template system generally escapes all variables to avoid XSS attacks.
|
|
|
|
However, due to an accident of history, the :ttag:`cycle` and :ttag:`firstof`
|
|
|
|
tags render their arguments as-is.
|
|
|
|
|
|
|
|
Django 1.6 starts a process to correct this inconsistency. The ``future``
|
|
|
|
template library provides alternate implementations of :ttag:`cycle` and
|
|
|
|
:ttag:`firstof` that autoescape their inputs. If you're using these tags,
|
|
|
|
you're encourage to include the following line at the top of your templates to
|
|
|
|
enable the new behavior::
|
|
|
|
|
|
|
|
{% load cycle from future %}
|
|
|
|
|
|
|
|
or::
|
|
|
|
|
|
|
|
{% load firstof from future %}
|
|
|
|
|
|
|
|
The tags implementing the old behavior have been deprecated, and in Django
|
|
|
|
1.8, the old behavior will be replaced with the new behavior. To ensure
|
|
|
|
compatibility with future versions of Django, existing templates should be
|
|
|
|
modified to use the ``future`` versions.
|
|
|
|
|
|
|
|
If necessary, you can temporarily disable auto-escaping with
|
|
|
|
:func:`~django.utils.safestring.mark_safe` or :ttag:`{% autoescape off %}
|
|
|
|
<autoescape>`.
|
|
|
|
|
2013-01-01 22:28:48 +01:00
|
|
|
``SEND_BROKEN_LINK_EMAILS`` setting
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
:class:`~django.middleware.common.CommonMiddleware` used to provide basic
|
|
|
|
reporting of broken links by email when ``SEND_BROKEN_LINK_EMAILS`` is set to
|
|
|
|
``True``.
|
|
|
|
|
|
|
|
Because of intractable ordering problems between
|
|
|
|
:class:`~django.middleware.common.CommonMiddleware` and
|
|
|
|
:class:`~django.middleware.locale.LocaleMiddleware`, this feature was split
|
|
|
|
out into a new middleware:
|
|
|
|
:class:`~django.middleware.common.BrokenLinkEmailsMiddleware`.
|
|
|
|
|
|
|
|
If you're relying on this feature, you should add
|
|
|
|
``'django.middleware.common.BrokenLinkEmailsMiddleware'`` to your
|
|
|
|
:setting:`MIDDLEWARE_CLASSES` setting and remove ``SEND_BROKEN_LINK_EMAILS``
|
|
|
|
from your settings.
|
2013-01-25 20:50:46 +01:00
|
|
|
|
|
|
|
``_has_changed`` method on widgets
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
If you defined your own form widgets and defined the ``_has_changed`` method
|
|
|
|
on a widget, you should now define this method on the form field itself.
|
2013-02-05 10:16:07 +01:00
|
|
|
|
|
|
|
``module_name`` model meta attribute
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
``Model._meta.module_name`` was renamed to ``model_name``. Despite being a
|
|
|
|
private API, it will go through a regular deprecation path.
|