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

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

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

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

Backwards-несовместимые изменения

Следующие изменения могут потребовать обновления кода при переходе с 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 ©2020 All rights reserved