Не далее, как 3 марта,
вышел релиз-кандидат Django 1.3, а значит пора задуматься, что собственно он из себя представляет. Ниже приведу список наиболее интересных для меня изменений.
Представления-классы
Появился новый фреймворк, позволяющий использовать классы в качестве представлений. Это значит, что теперь представления можно комбинировать из различных методов различных классов (наследование, полиморфизм и прочие вкусности). Предполагается, что сие нововведение должно повысить повторное использование кода и освободить программиста от написания одного и того же по нескольку раз. Подробнее можно почитать
здесь.
Хранение статических файлов
Вопрос о том, как хранить статические файлы (изображения, CSS, JavaScript и т.п.) в своем проекте, вставал перед всеми без исключения разработчиками. Обычно все сводилось к тому, что эти файлы хранились рядом с контентом, загружаемым пользователями на сайт, а именно по пути, указанному в параметре настроек MEDIA_ROOT.
Вместе с новым релизом будет поставляться приложение django.contrib.staticfiles, с помощью которого можно будет довольно гибко управлять хранением статических файлов. В настройках появятся новые параметры STATICFILES_DIRS и STATIC_URL, о которых можно подробно узнать
тут и
тут.
Настраиваемое каскадное удаление
В предыдущих версиях Django удаление сущности приводило к каскадному удалению всех зависимых от нее сущностей, связанных с ней посредством ForeignKey или OneToOneField. Теперь эта досадная оплошность исправлена: в конструкторах этих полей можно указывать аргумент
on_delete, определяющий поведение ORM при удалении сущности.
Логирование
Поддержка питоновского модуля logging
внедрена на уровне фреймворка.
Поддержка unittest2
В стандартную библиотеку Python, начиная с версии 2.7, входит обновленный пакет unittest2, включающий некоторые полезные изменения. Новая версия Django будет поставляться вместе с копией этого пакета, переработанной для обратной совместимости с Python 2.4.
Улучшения FileField
Во-первых, FileField более не удаляет файлы. В прошлых версиях если объект, содержащий поле FileField, удалялся, то и файл, ассоциированный с этим полем, физически удалялся с носителя. В некоторых случаях это приводило к потере данных. Поэтому от такой затеи решили отказаться.
Во-вторых, виджетом по умолчанию для FileField стал ClearableFileInput. В нем имеется галочка, позволяющая очистить виджет, то есть удалить информацию о файле из БД.
Другие интересные изменения
- добавлен еще один шорткат render(), аналогичный render_to_response(), но также передающий по умолчанию параметр RequestContext (наконец-то!);
- функции управления транзакциями (такие как transaction.autocommit()) теперь можно использовать как менеджеры контекста;
- в шаблонах в одном блоке with теперь можно указывать сразу несколько переменных;
- в шаблонах в блоке load можно использовать ключевое слово from для загрузки лишь определенных тегов из библиотеки;
- с помощью класса TemplateResponse можно изменять (в декораторе или middleware) содержимое ответа еще до того, как он будет сконвертирован в HttpResponse;
- разные улучшения в инфраструктуре кеширования;
- mod_python более не поддерживается;
- и др.
Приятно наблюдать, как любимый фреймворк развивается семимильными шагами.
(источник)