Upgrade von Django von Version 1.9 auf Version 2.0

Hallo, heute möchte ich Ihnen erklären, wie Sie ein Projekt von Version 1.9 auf 2.0 aktualisieren können. Was sind die wichtigsten Nuancen, die berücksichtigt und neu geschrieben werden müssen, damit das Projekt mit der neuen Version von Django beginnt?

Erster Schritt


Dies ist ein Update von Django auf Version 2.0 sowie ein Update aller zugehörigen Pakete, die im Projekt verwendet werden Ich verwende die virtuelle Umgebung und die Datei resources.txt. Für mich ist dies eine Möglichkeit, für Sie kann dies anders sein.

Nachdem Sie alle Pakete aktualisiert haben, sollten Sie das Projekt nicht starten. Es wird ohnehin nicht gestartet. Beginnen Sie also sofort damit, alle wichtigen Punkte zu korrigieren, damit das Projekt gestartet werden kann.

Zweiter Schritt. Aktualisieren aller urls.py Ihres Projekts


In Ihrer Haupt-URLs.py, in der Sie URLs aus anderen Anwendungen einfügen, verbinden wir:
aus django.urls importiere re_path, path.

Und wir ändern die URL in den Pfad und entfernen reguläre Ausdrücke in diesen Verbindungen.

url(r'^ some/', include('some.urls')), #   path('some/', include('some.urls')), 

Wenn Sie Ansichten direkt aus dieser Anwendung verwenden, für die Stammkunden erforderlich sind, verwenden wir:

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

In Plug-In-Anwendungen (z. B. some / urls.py) verwenden wir in der Datei urls.py:

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

Wenn Sie während der Aufnahme einen Namespace in URLs verwenden, löschen Sie diese von dort und übertragen Sie sie direkt an die verbundene Anwendung. Wir gehen zu urls.py dieser Anwendung und schreiben es über urlpatterns = []

 app_name = 'app-application' 

Diese Zeile dient als Ersatz für den Namespace und dient dazu, die Haupt-URLs sauberer und lesbarer zu machen sowie das Ändern von Namen an einem Ort zu vereinfachen.

Dritter Schritt


Wir verwenden die Suche während des gesamten Projekts. Abhängig von Ihrem Code-Editor, den Sie während der Entwicklung verwenden, können dies verschiedene Hotkeys sein. Ich glaube, Sie kennen sie, also werde ich hier nicht aufhören.

Wir fahren hinein:

 is_authenticated() 

Und wechseln Sie zu is_authenticated . Dies ist keine Methode, sondern eine Eigenschaft. Dieser Fehler löst eine Ausnahme aus.

Weiter im Projekt suchen wir:

 from django.core.urlresolvers import reverse 

Und wechseln Sie zu:

 from django.urls import reverse 

Vierter Schritt


Jetzt in allen Modellen. Ausländischer Schlüssel muss ein obligatorisches Positionsargument "on_delete" vorhanden sein, zum Beispiel:

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

Als nächstes machen wir:

 python manage.py makemigrations python manage.py migrate 

Fünfter Schritt


Wenn Sie versuchen, das Projekt zu starten, sollte es bereits gestartet sein, aber sofort wird eine Fehlermeldung angezeigt, sobald Sie zu 127.0.0.1:8000 wechseln.

Der Fehler lautet wie folgt:

 AttributeError at / 'WSGIRequest' object has no attribute 'user' 

Dies liegt an der Tatsache, dass Sie MIDDLEWARE_CLASSES in MIDDLEWARE umbenennen müssen
Als nächstes wird in der Konsole der folgende Fehler angezeigt:

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

Dieser Fehler tritt auf, weil Sie über alte Middleware verfügen und diese aktualisieren müssen auf:

 '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' 

Sechster Schritt


Wenn Sie im Projekt Ihre eigene Middleware verwenden, sollten diese von MiddlewareMixin und nicht von object geerbt werden (Sie können auch object verwenden, müssen dann jedoch zusätzliche erforderliche Methoden registrieren).

Import:

 from django.utils.deprecation import MiddlewareMixin 

Das ist alles! :) :)

Wenn Sie ein sehr großes Projekt haben und eine große Anzahl von Paketen verwenden, werden Sie natürlich mehr Probleme haben, aber bereits eine Kette von Fehlern in der Konsole hilft Ihnen, diese zu lösen und das Projekt im richtigen Modus zu starten. In diesem Handbuch werden die wichtigsten Fehler und Lösungsmöglichkeiten beschrieben, die für alle Projekte mit Django 1.9 relevant sind (einige Punkte sind für Django Version 1.11 nicht relevant). Sie helfen dabei, das Projekt schnell auf Django 2.0 zu übertragen und unnötigen Zeitverlust beim Parsen und Suchen zu vermeiden Lösungen für häufige Fehler.

Source: https://habr.com/ru/post/de417837/


All Articles