• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

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

Добро пожаловать в Джанго 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.

Обратная несовместимость изменений

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

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

Что нового в Джанго 1.0

Много*!

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

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

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

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

New in Django 1.0:

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

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

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

Re-factored admin application

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

Дополнительную информацию см. в справке администратора.

Улучшена обработка Юникода.

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

См. Данные Unicode.

Улучшенный ORM

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

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

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

django.contrib.gis (GeoDjango)

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

Подробности смотрите в GeoDjango.

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

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

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

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

Общие отношения в формах и администрировании

Классы теперь включены в django.contrib.contenttypes, который можно использовать для поддержки общих отношений как в интерфейсе администратора, так и в формах конечного пользователя. Подробности смотрите в документации по родовым отношениям <generic-relations>.

Различие INSERT/UPDATE

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

Подробности смотрите в Принудительное выполнение INSERT или UPDATE.

Разделить CacheMiddleware

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

Полная информация, включая обновленные примечания по правильному использованию, находится в документации по кэшированию.

Рефакторинг django.contrib.comments.

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

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

A number of features and methods which had previously been marked as deprecated, and which were scheduled for removal prior to the 1.0 release, are no longer present in Django. These include imports of the form library from django.newforms (now located simply at django.forms), the form_for_model and form_for_instance helper functions (which have been replaced by ModelForm) and a number of deprecated features which were replaced by the dispatcher, file-uploading and file-storage refactorings introduced in the Django 1.0 alpha releases.

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

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

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

Если вы используете наследование нескольких табличных моделей, помните об этом предостережении: дочерние модели, использующие пользовательские 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 пытается поддерживать как можно больше функций на всех серверах баз данных. Однако не все серверные части баз данных одинаковы, и, в частности, многие из поддерживаемых баз данных сильно различаются от версии к версии. Рекомендуем ознакомиться с нашими заметками о поддерживаемых базах данных:

Back to Top