Как лучше всего перейти с Django 0.96 на 1.0?

Стоит ли мне пытаться обновить существующее приложение или просто переписать его в основном с нуля, сохранив, какие части (шаблоны и т. д.) Я могу?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
8
0
879
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Обновление. Для меня это было очень просто: заменить __str__() на __unicode__(), написать базовый admin.py и готово. Просто запустите приложение на 1.0, протестируйте его, а при обнаружении ошибки используйте документацию на обратно несовместимые изменения, чтобы узнать, как исправить проблему.

Ответ принят как подходящий

Хотя это зависит от того, что вы делаете, большинство приложений должно иметь возможность просто обновиться, а затем исправить все, что ломается. По моему опыту, основные вещи, которые мне пришлось исправить после обновления, это

  1. Изменения некоторых забавных вещей с моделями, таких как синтаксис следующих внешних ключей.

  2. Небольшой набор изменений в шаблоне, в первую очередь с автоматическим экранированием.

  3. Все, что зависит от конкретной структуры внутреннего устройства Django. Это не должно быть проблемой, если вы не делаете такие вещи, как динамическое изменение внутренних компонентов Django, чтобы изменить их поведение так, как это необходимо / удобно для вашего проекта.

Подводя итог, если вы не делаете много действительно странных и / или сложных вещей, простое обновление должно быть относительно безболезненным и потребовать всего нескольких изменений.

Не забудьте изменить админку и формы. Это важно. Админ не сложен. Однако формы могут быть убийственными.

S.Lott 24.09.2008 21:42

Просто обновите свое приложение. Переход с 0.96 на 1.0 был огромным, но с точки зрения изменений, связанных с обратной несовместимостью, я сомневаюсь, что в вашем приложении их даже 10%.

Я был на стволе до Django 1.0, поэтому переход для меня произошел со временем, но даже тогда единственными важными вещами, которые мне пришлось изменить, были newforms, newforms-admin, ул.ул.ong> () в юникод () и maxlength на max_length.

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

Легко обновлять только самые простые сайты.

Ожидайте настоящей боли, если ваш сайт окажется для не-ASCII части мира (читайте: где-нибудь за пределами США и Великобритании). Самым болезненным изменением в Django было внутреннее переключение со строк байтов на объекты юникода - теперь вам нужно найти все места, где вы используете строки байтов, и изменить их на юникод. Худший случай - это рендеринг шаблона, вы никогда не узнаете, что забыли изменить одну переменную, пока не получите UnicodeError.

Другая примечательная вещь: манипуляторы (старые формы) ушли, и у вас нет другого выхода, кроме как переписать все части с помощью форм (новые формы).

Если это ваш случай и ваш проект больше, чем 2-3 приложения, я бы не хотел обновляться до тех пор, пока это действительно не понадобится.

Мы обновились в многоэтапном процессе, и меня это вполне устраивает. Приложение в вопросе было около 100 000 LoC и выполняло несколько основных бизнес-функций с множеством интерфейсов с унаследованными системами. Мы так работали:

  1. Обновление до django 0.97-post unicode слить. Исправьте все проблемы с Юникодом
  2. реорганизовать приложение в многоразовые приложения, добавляйте тесты. Это оставило нас с 40.000 LoC в основном приложении / проекте
  3. Обновление до django 0.97-post autoexcape merge. Исправьте автоматическое экранирование в повторно используемых приложениях, созданных в 3. Затем исправьте оставшиеся проблемы с автоматическим экранированием в приложении mian.
  4. Обновитесь до 1.0. Осталось в основном починить админку.

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

Финальное слияние было гораздо менее запутанным, чем ожидалось, и заняло около недели на слияние, проверку, тестирование и исправление 4 кодеров. Затем мы развернулись, и около недели нас укусили ранее неожиданные ошибки.

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

Другие вопросы по теме