Главная » Хабрахабр » Обновление Django с версии 1.9 до версии 2.0

Обновление Django с версии 1.9 до версии 2.0

Здравствуйте, сегодня я хотел бы вам рассказать о том, как обновить проект с версии 1.9 до 2.0. Какие основные нюансы нужно учесть и переписать, дабы проект стартовал на новой версии Django.

Первый шаг

Это обновление Django до версии 2.0, а также обновление всех сопутствующих ваших пакетов, которые используются в проекте, т.к. я использую виртуальное окружение и requirements.txt, то для меня это один способ, для вас может быть другой.

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

Второй шаг. Обновление всех urls.py вашего проекта

В главном вашем urls.py, в котором вы инклюдите урлы из других апликейшинов, подключаем:
from django.urls import re_path, path.

И меняем c url на path, а так же убираем регулярные выражения в данных подключениях.

url(r'^ some/', include('some.urls')), # старый вариант
path('some/', include('some.urls')),

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

re_path(r'^app/$', App.as_view(), name='app')

В подключаемых апликейшинах(например some/urls.py), в файле urls.py, используем:

re_path(r'^create/$', Create.as_view(), name='create')

Если вы используете namespace в урлах при инклуде, то удаляем их оттуда и переносим их непосредственно в подключаемое приложение. Переходим в urls.py данного приложения и прописываем сверху над urlpatterns =[]

app_name = ‘app-application’

Данная строчка выступает заменой namespace и призвана сделать главный urls.py более чистым и читаемым, а также для удобства изменения имён в одном месте.

Третий шаг

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

Вбиваем:

is_authenticated()

И меняем на is_authenticated. Теперь это не метод, а свойство. Эта ошибка будет вызывать исключение.

Далее в проекте ищем:

from django.core.urlresolvers import reverse

И меняем на:

from django.urls import reverse

Четвёртый шаг

Теперь во всех models.ForeignKey, должен быть обязательный позиционны аргумент “on_delete” например:

on_delete=models.CASCADE
on_delete=models.DO_NOTHING
on_delete=models.SET_NULL

Далее делаем:

python manage.py makemigrations
python manage.py migrate

Пятый шаг

Если вы попытаетесь запустить проект, то он уже должен запуститься, но сразу он вам выдаст ошибку, как только вы зайдёте на 127.0.0.1:8000.

Ошибка будет следующая:

AttributeError at /
‘WSGIRequest’ object has no attribute ‘user’

Она происходит из-за того, что нужно переименовать MIDDLEWARE_CLASSES на MIDDLEWARE
Далее вы получите следующую ошибку в консоли:

ImproperlyConfigured: WSGI application 'application' could not be loaded; Error importing module: 'application doesn't look like a module path django.core.exceptions.

Эта ошибка происходит из-за того что у вас старые middleware, и вы должны их обновить на:

'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware'

Шестой шаг

Если вы используете собственные middleware в проекте, то они должны наследоваться от MiddlewareMixin, а не от object (можно и через object, но тогда нужно прописывать дополнительные обязательные методы).

Импорт:

from django.utils.deprecation import MiddlewareMixin

На этом всё! 🙂

В данном гайде описаны основные ошибки и способы их решения, которые актуальны для всех проектов с Django 1. Конечно, если у вас очень большой проект и вы используете большое количество пакетов, то проблем у вас будет больше, но уже цепочка ошибок в консоли вам поможет их решить и запустить проект в должном режиме. 11), и помогут быстрее перенести проект на Django 2. 9 (некоторые моменты не актуальны для версии Django 1. 0, а так же избежать лишней потери времени на разбор и поиск решений типичных ошибок.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Как Apple выходит из бесконечного цикла. Истории старого кампуса

Фото: Michelle Groskopf, Wired Все становится лучше, больше, быстрее, сверкающее. Я странно чувствую себя, смотря каждый год презентацию новых айфонов. Но в то же время будто бы укачивает от слишком разогнанного обмена веществ. Просто время от времени старые фанаты роняют ...

Чистота в мастерской гика. Часть 2

Или пылесос с управлением по Bluetooth В первой части я рассказал про пылесосы и циклоны для уборки стружки в мастерской. В комментах поделились опытом использования разных пылесосов хорошим и не очень. Теперь расскажу про то, как я делаю прототипы плат ...