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

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

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

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

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

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

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

Из-за ошибки в более старых версиях MySQLdbмодуля Python (который 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 генерирует для ссылок на внешние ключи, немного изменился. Эти имена обычно используются только тогда, когда невозможно поместить ссылку непосредственно на затронутый столбец, поэтому они не всегда видны.

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

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

  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прочтите документацию по новым формам .

Улучшения 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)
)

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

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 и (надеюсь) будущего выпуска.
  • Наши билетные менеджеры Крис Бивен (он же SmileyChris), Саймон Гринхилл, Майкл Радзей и Гэри Уилсон. Они согласились взять на себя грандиозную задачу - превратить наши билеты в красиво каталогизированное представление. Понять, над чем работать, теперь примерно в миллион раз проще; еще раз спасибо, ребята.
  • Всем, кто отправил отчет об ошибке, патч или комментарий к заявке. Мы не можем поблагодарить всех по имени - более 200 разработчиков представили патчи, которые вошли в 0.96, - но все, кто внес свой вклад в Django, указаны в АВТОРАХ .

Copyright ©2021 All rights reserved