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

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

Добро пожаловать в Джанго 0.96!

Основная цель версии 0.96 — очистка и стабилизация функций, представленных в версии 0.95. Начиная с версии 0.95 было внесено несколько небольших «обратно несовместимых изменений»_, но процесс обновления должен быть довольно простым и не должен требовать серьезных изменений в существующих приложениях.

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

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

Следующие изменения могут потребовать от вас обновления кода при переходе с 0,95 на 0,96:

Требования к версии MySQLdb

Из-за ошибки в старых версиях модуля Python MySQLdb (который Django использует для подключения к базам данных MySQL), серверная часть MySQL Django теперь требует версии 1.2.1p2 или выше MySQLdb`` и вызовет исключения, если вы попытаетесь использовать более старую версию.

Если вы в настоящее время не можете обновить свою копию MySQLdb, чтобы она соответствовала этому требованию, в Django был добавлен отдельный обратно совместимый бэкэнд, называемый «mysql_old». Чтобы использовать этот бэкэнд, измените параметр DATABASE_ENGINE в файле настроек Django следующим образом:

DATABASE_ENGINE = "mysql"

на это:

DATABASE_ENGINE = "mysql_old"

Однако мы настоятельно рекомендуем пользователям MySQL как можно скорее перейти на более свежую версию MySQLdb. Серверная часть «mysql_old» предназначена только для облегчения этого перехода и считается устаревшей; за исключением любых необходимых исправлений безопасности, он не будет активно поддерживаться и будет удален в будущем выпуске Django.

Также обратите внимание, что некоторые функции, такие как новый параметр DATABASE_OPTIONS (подробности см. в документации по базам данных), доступны только на серверной части «mysql» и не будут доступны для «mysql_old».

Имена ограничений базы данных изменены

Формат имен ограничений, которые Django генерирует для ссылок на внешние ключи, немного изменился. Эти имена обычно используются только тогда, когда невозможно поместить ссылку непосредственно в затронутый столбец, поэтому они не всегда видны.

Результатом этого изменения является то, что запуск manage.py reset и подобных команд для существующей базы данных может сгенерировать SQL с новой формой имени ограничения, в то время как сама база данных содержит ограничения, названные в старой форме; это приведет к тому, что сервер базы данных выдаст сообщение об ошибке изменения несуществующих ограничений.

Если вам нужно обойти эту проблему, есть два метода:

  1. Перенаправьте вывод файла manage.py в файл и отредактируйте сгенерированный SQL, чтобы использовать правильные имена ограничений перед его выполнением.

  2. Изучите выходные данные manage.py sqlall, чтобы увидеть имена ограничений нового стиля, и используйте их в качестве руководства для переименования существующих ограничений в вашей базе данных.

Изменение имени в manage.py

Некоторые параметры manage.py изменились с добавлением поддержки фикстур:

  • Появились новые команды dumpdata и loaddata, которые, как и следовало ожидать, будут выгружать и загружать данные в/из базы данных. Эти команды могут работать с любым из поддерживаемых Django форматов сериализации.

  • Команда sqlinitialdata была переименована в sqlcustom, чтобы подчеркнуть, что для данных следует использовать команду loaddata (и sqlcustom для других пользовательских SQL-представлений, хранимых процедур и т. д.).

  • Рудиментарная команда install была удалена. Используйте syncdb.

Изменено экранирование обратной косой черты.

API базы данных Django теперь экранирует обратную косую черту, заданную в качестве параметров запроса. Если у вас есть какой-либо код API базы данных, который соответствует обратной косой черте, и он работал раньше (несмотря на отсутствие экранирования), вам придется изменить свой код, чтобы «убрать» косые черты на один уровень.

Например, раньше это работало:

# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\\\")

Вышеупомянутое теперь неверно и должно быть переписано как:

# Find text containing a single backslash
MyModel.objects.filter(text__contains="\\")

Удалена настройка ENABLE_PSYCO.

Параметр ENABLE_PSYCO больше не существует. Если ваш файл настроек содержит ENABLE_PSYCO, это не будет иметь никакого эффекта; Чтобы использовать Psyco, мы рекомендуем написать класс промежуточного программного обеспечения для его активации.

Что нового в версии 0.96?

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

Новая библиотека форм

django.newforms — это новая библиотека обработки форм Django. Это замена django.forms, старой структуры формы/манипулятора/валидации. Оба API доступны в версии 0.96, но в следующих двух выпусках мы планируем полностью перейти на новую систему форм, а также объявить устаревшей и удалить старую систему.

Этот переход состоит из трех элементов:

  • Мы скопировали текущий django.forms в django.oldforms. Это позволяет вам обновить код сейчас, вместо того, чтобы ждать обратно несовместимых изменений и спешить исправлять код постфактум. Просто измените свои операторы импорта следующим образом:

    from django import forms  # 0.95-style
    from django import oldforms as forms  # 0.96-style
    
  • В следующем официальном выпуске Django текущий django.newforms будет перенесен в django.forms. Это будет обратно несовместимое изменение, и всем, кто в то время еще использует старую версию django.forms, придется изменить свои операторы импорта, как описано выше.

  • В следующем выпуске django.oldforms будет полностью удален.

Хотя библиотека newforms будет продолжать развиваться, она готова к использованию в большинстве распространенных случаев. Мы рекомендуем всем, кто только знаком с обработкой форм, пропустить старую систему форм и начать с новой.

Для получения дополнительной информации о django.newforms прочтите документацию newforms.

Улучшения URLconf

Теперь вы можете использовать любой вызываемый объект в качестве обратного вызова в URLconfs (ранее были разрешены только строки, ссылающиеся на вызываемые объекты). Это позволяет гораздо более естественно использовать URLconfs. Например, этот URLconf:

from django.conf.urls.defaults import *

urlpatterns = patterns("", ("^myview/$", "mysite.myapp.views.myview"))

теперь можно переписать как:

from django.conf.urls.defaults import *
from mysite.myapp.views import myview

urlpatterns = patterns("", ("^myview/$", myview))

Одно полезное применение этого можно увидеть при использовании декораторов; это изменение позволяет вам применять декораторы к представлениям в вашей конфигурации URL. Таким образом, вы можете очень легко сделать общее представление требующим входа в систему:

from django.conf.urls.defaults import *
from django.contrib.auth.decorators import login_required
from django.views.generic.list_detail import object_list
from mysite.myapp.models import MyModel

info = {
    "queryset": MyModel.objects.all(),
}

urlpatterns = patterns("", ("^myview/$", login_required(object_list), info))

Обратите внимание, что оба синтаксиса (строки и вызываемые объекты) действительны и будут действовать в обозримом будущем.

Тестовая среда

Django теперь включает в себя тестовую среду, так что вы можете начать превращать страх в скуку (приношу извинения Кенту Беку). Вы можете писать тесты на основе doctest или unittest и тестировать свои представления с помощью простого тестового клиента.

Также появилась новая поддержка «фикстур» — исходных данных, хранящихся в любом из поддерживаемых форматов сериализации, которые будут загружены в вашу базу данных в начале ваших тестов. Это значительно упрощает тестирование на реальных данных.

Подробную информацию смотрите в документации по тестированию.

Улучшения в интерфейсе администратора

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

Спасибо

Начиная с версии 0.95, несколько человек вышли вперед и взяли на себя новую важную роль в разработке Django. Мы хотели бы поблагодарить этих людей за их тяжелую работу:

  • Расселу Кит-Маги и Малкольму Трединнику за большой вклад в код. Без них этот релиз был бы невозможен.

  • Нашему новому менеджеру выпуска, Джеймсу Беннетту, за его работу по выпуску версий 0.95.1, 0.96 и (надеюсь) будущих версий.

  • Наши билетные менеджеры Крис Бивен (он же СмайлиКрис), Саймон Гринхилл, Майкл Радзей и Гэри Уилсон. Они согласились взять на себя монументальную задачу по приведению наших билетов в изящный каталог. Выяснить, над чем работать, теперь примерно в миллион раз проще; еще раз спасибо, ребята.

  • Все, кто отправил отчет об ошибке, патч или комментарий к заявке. Мы не можем поблагодарить всех поименно — более 200 разработчиков прислали патчи, вошедшие в версию 0.96, — но все, кто внес свой вклад в Django, перечислены в AUTHORS.

Back to Top