Примечания к выпуску Django 1.0

Добро пожаловать в Django 1.0!

Мы ждали этого момента более трех лет, и наконец-то он настал. Django 1.0 представляет собой крупнейшую веху в развитии Django на сегодняшний день: веб-фреймворк, которым группа перфекционистов может по-настоящему гордиться.

Django 1.0 - это более трех лет развития сообщества как проекта с открытым исходным кодом. Django получил вклад от сотен разработчиков, был переведен на пятьдесят языков, и сегодня используется разработчиками на всех континентах и в любой сфере деятельности.

Интересная историческая справка: когда Django был впервые выпущен в июле 2005 года, первая выпущенная версия Django была взята из внутреннего репозитория с номером ревизии 8825. Django 1.0 представляет собой ревизию 8961 нашего публичного репозитория. Представляется уместным, что наш релиз 1.0 состоялся в тот момент, когда вклад сообщества превысил вклад, сделанный в частном порядке.

Стабильность и перспективная совместимость

Выпуск Django 1.0 сопровождается обещанием стабильности API и совместимости в будущем. В двух словах это означает, что код, который вы разрабатываете на Django 1.0, будет продолжать работать на 1.1 без изменений, и вам потребуется внести лишь незначительные изменения для любого релиза 1.X.

Подробную информацию см. в API stability guide.

Обратно-несовместимые изменения

Django 1.0 имеет ряд обратно несовместимых изменений по сравнению с Django 0.96. Если у вас есть приложения, написанные на Django 0.96, которые вам нужно перенести, смотрите наше подробное руководство по переносу:

Полный список обратно несовместимых изменений можно найти на сайте https://code.djangoproject.com/wiki/BackwardsIncompatibleChanges.

Что нового в Django 1.0

Много!

Начиная с Django 0.96, мы сделали более 4,000 коммитов кода, исправили более 2,000 ошибок, отредактировали, добавили или удалили около 350,000 строк кода. Мы также добавили 40,000 строк новой документации и значительно улучшили уже имеющуюся.

На самом деле, новая документация - одна из наших любимых особенностей Django 1.0, поэтому мы могли бы начать с нее. Во-первых, появился новый сайт документации:

Документация была значительно улучшена, очищена и в целом стала просто замечательной. Теперь есть специальный поиск, индексы и многое другое.

Мы не можем задокументировать все, что появилось в версии 1.0, но документация будет вашим окончательным руководством. Везде, где вы видите что-то вроде:

New in Django 1.0:

Эта функция является новой в Django 1.0

Вы будете знать, что перед вами что-то новое или измененное.

Другими основными особенностями Django 1.0 являются:

Рефакторинг приложения администратора

Административный интерфейс Django (django.contrib.admin) был полностью рефакторин; определения администратора теперь полностью отделены от определений модели (больше никаких объявлений class Admin в моделях!), переписан для использования новой библиотеки обработки форм Django (представленной в релизе 0.96 как django.newforms, а теперь доступной как просто django.forms) и переработан с учетом расширения и настройки. Полная документация по приложению администратора доступна в официальной документации Django:

Подробности см. в admin reference.

Улучшенная обработка Unicode

Внутренние компоненты Django были переработаны для использования Unicode повсеместно; это значительно упрощает задачу работы с незападноевропейским контентом и данными в Django. Кроме того, были предоставлены полезные функции для облегчения взаимодействия со сторонними библиотеками и системами, которые могут обрабатывать или не обрабатывать Unicode. Подробности можно найти в документации по работе с Unicode в Django.

См. Данные Юникода.

Улучшенный ORM

Объектно-реляционный связующий модуль Django - компонент, который обеспечивает связку между классами моделей Django и вашей базой данных, и который является посредником в ваших запросах к базе данных - был значительно улучшен в результате масштабного рефакторинга. Для большинства пользователей Django это обратно совместимо; API для запросов к базам данных на публике претерпел несколько незначительных изменений, но большая часть обновлений произошла во внутренних компонентах ORM. Руководство по изменениям, включая обратно несовместимые модификации и упоминания о новых возможностях, открытых этим рефакторингом, находится по адресу available on the Django wiki.

Автоматическое экранирование переменных шаблона

Для повышения безопасности от уязвимостей межсайтового скриптинга (XSS) система шаблонов Django теперь автоматически экранирует вывод переменных. Это поведение настраивается и позволяет помечать как переменные, так и более крупные конструкции шаблонов как безопасные (не требующие экранирования) или небезопасные (требующие экранирования). Полное руководство по этой функции находится в документации к тегу autoescape.

django.contrib.gis (GeoDjango)

Проект, работа над которым велась более года, добавляет в Django поддержку ГИС мирового класса (Geographic Information Systems) в виде приложения contrib. Его документация в настоящее время поддерживается извне, и вскоре будет включена в основную документацию Django. Огромная благодарность выражается Джастину Бронну, Джереми Данку, Бретту Хернеру и Трэвису Пинни за их усилия по созданию и завершению этой функции.

See GeoDjango for details.

Подключаемое файловое хранилище

Встроенные в Django FileField и ImageField теперь могут использовать преимущества подключаемых бэкендов файлового хранилища, что позволяет широко настраивать, где и как загруженные файлы будут храниться в Django. Подробности смотрите в the files documentation; большое спасибо Марти Алчину (Marty Alchin) за проделанную работу.

Совместимость с Jython

Благодаря большой работе Лео Сото во время проекта Google Summer of Code, кодовая база Django была рефакторингована для устранения несовместимости с Jython, реализацией Python, написанной на Java, которая выполняет код Python на Java Virtual Machine. Теперь Django совместим с грядущим релизом Jython 2.5.

Родовые отношения в формах и администрировании

В django.contrib.contenttypes теперь включены классы, которые можно использовать для поддержки общих отношений как в интерфейсе администратора, так и в формах конечного пользователя. Подробности смотрите в the documentation for generic relations.

INSERT/UPDATE различие

Хотя поведение Django по умолчанию, когда метод save() модели автоматически определяет, выполнить ли операцию INSERT или UPDATE на уровне SQL, подходит для большинства случаев, иногда возникают ситуации, когда принудительное выполнение той или иной операции полезно. В результате модели теперь могут поддерживать дополнительный параметр save(), который позволяет принудительно выполнить определенную операцию.

Подробнее см. в разделе INSERT или UPDATE.

Split CacheMiddleware

Django CacheMiddleware был разделен на три класса: CacheMiddleware по-прежнему существует и сохраняет всю свою прежнюю функциональность, но теперь он построен из двух отдельных классов промежуточного ПО, которые обрабатывают две части кэширования (вставка в кэш и чтение из него) отдельно, предлагая дополнительную гибкость для ситуаций, когда объединение этих функций в одно промежуточное ПО создавало проблемы.

Полная информация, включая обновленные примечания по надлежащему использованию, приведена в the caching documentation.

Отредактировано django.contrib.comments

В рамках проекта Google Summer of Code Теджасви Путрайя провел масштабную переработку и рефакторинг встроенной системы комментариев Django, значительно повысив ее гибкость и настраиваемость.

Удаление устаревших функций

Ряд функций и методов, которые ранее были помечены как устаревшие, и которые планировалось удалить до выхода версии 1.0, больше не присутствуют в Django. К ним относятся импорт библиотеки форм из django.newforms (теперь она находится просто по адресу django.forms), вспомогательные функции form_for_model и form_for_instance (которые были заменены на ModelForm) и ряд устаревших функций, которые были заменены рефакторингом диспетчера, загрузки файлов и хранения файлов, представленным в альфа-релизе Django 1.0.

Известные проблемы

Мы сделали все возможное, чтобы сделать Django 1.0 как можно более надежным, но, к сожалению, в релизе есть пара проблем, о которых мы знаем.

Наследование многотабличной модели с помощью to_field

Если вы используете multiple table model inheritance, учтите следующее предостережение: дочерние модели, использующие пользовательские parent_link и to_field, вызовут ошибки целостности базы данных. Набор моделей, подобный следующим, недействителен:

class Parent(models.Model):
    name = models.CharField(max_length=10)
    other_value = models.IntegerField(unique=True)

class Child(Parent):
    father = models.OneToOneField(Parent, primary_key=True, to_field="other_value", parent_link=True)
    value = models.IntegerField()

Эта ошибка будет исправлена в следующем выпуске Django.

Оговорки при поддержке некоторых баз данных

Django пытается поддерживать как можно больше функций на всех бэкендах баз данных. Однако, не все бэкенды баз данных одинаковы, и, в частности, многие из поддерживаемых баз данных сильно отличаются от версии к версии. Хорошей идеей будет ознакомиться с нашим notes on supported database:

Вернуться на верх