Bonjour, aujourd'hui, je voudrais vous expliquer comment mettre à niveau un projet de la version 1.9 vers la version 2.0. Quelles sont les principales nuances à considérer et à réécrire pour que le projet démarre sur la nouvelle version de Django.
Première étape
Ceci est une mise à jour de Django vers la version 2.0, ainsi qu'une mise à jour de tous vos packages associés qui sont utilisés dans le projet, comme J'utilise l'environnement virtuel et requirements.txt, alors pour moi, c'est une façon, pour vous, cela peut être différent.
Après avoir mis à jour tous les packages, vous ne devez pas démarrer le projet, il ne démarrera pas de toute façon, alors commencez immédiatement à corriger tous les points principaux pour que le projet démarre.
Deuxième étape. Mise à jour de toutes les urls.py de votre projet
Dans votre urls.py principale, dans laquelle vous incluez des URL d'autres applications, nous nous connectons:
depuis django.urls importez re_path, path.
Et nous changeons c url en chemin, ainsi que supprimons les expressions régulières dans ces connexions.
url(r'^ some/', include('some.urls')),
Si vous utilisez des vues directement depuis cette application, ce qui nécessite des habitués, nous utilisons:
re_path(r'^app/$', App.as_view(), name='app')
Dans les applications plug-in (par exemple, certains / urls.py), dans le fichier urls.py, nous utilisons:
re_path(r'^create/$', Create.as_view(), name='create')
Si vous utilisez un espace de noms dans les URL pendant l'inclusion, supprimez-les de là et transférez-les directement vers l'application connectée. Nous allons sur urls.py de cette application et l'écrivons au-dessus de urlpatterns = []
app_name = 'app-application'
Cette ligne remplace le namespace et est conçue pour rendre les urls.py principales plus propres et lisibles, ainsi que pour la commodité de changer les noms en un seul endroit.
Troisième étape
Nous utilisons la recherche tout au long du projet, selon votre éditeur de code que vous utilisez pendant le développement, il peut s'agir de différents raccourcis clavier, je pense que vous les connaissez, donc je ne m'arrêterai pas là.
Nous conduisons:
is_authenticated()
Et
is_authenticated
à
is_authenticated
. Maintenant, ce n'est pas une méthode, mais une propriété. Cette erreur lèvera une exception.
Plus loin dans le projet, nous recherchons:
from django.core.urlresolvers import reverse
Et changez pour:
from django.urls import reverse
Quatrième étape
Maintenant dans tous les modèles. ForeignKey, il doit y avoir un argument positionnel obligatoire "on_delete" par exemple:
on_delete=models.CASCADE on_delete=models.DO_NOTHING on_delete=models.SET_NULL
Ensuite, nous faisons:
python manage.py makemigrations python manage.py migrate
Cinquième étape
Si vous essayez de démarrer le projet, il devrait déjà démarrer, mais il vous donnera immédiatement une erreur dès que vous accédez à 127.0.0.1:8000.
L'erreur sera la suivante:
AttributeError at / 'WSGIRequest' object has no attribute 'user'
Cela est dû au fait que vous devez renommer MIDDLEWARE_CLASSES en MIDDLEWARE
Ensuite, vous obtiendrez l'erreur suivante dans la console:
django.core.exceptions.ImproperlyConfigured: WSGI application 'application' could not be loaded; Error importing module: 'application doesn't look like a module path
Cette erreur se produit car vous avez un ancien middleware et vous devez les mettre à jour vers:
'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'
Sixième étape
Si vous utilisez votre propre middleware dans le projet, ils doivent être hérités de MiddlewareMixin, et non d'objet (cela est également possible via object, mais des méthodes obligatoires supplémentaires doivent être prescrites).
Importer:
from django.utils.deprecation import MiddlewareMixin
C’est tout! :)
Bien sûr, si vous avez un très gros projet et que vous utilisez un grand nombre de packages, vous aurez plus de problèmes, mais déjà une chaîne d'erreurs dans la console vous aidera à les résoudre et à démarrer le projet dans le mode approprié. Ce guide décrit les principales erreurs et les moyens de les résoudre, qui sont pertinents pour tous les projets avec Django 1.9 (certains points ne sont pas pertinents pour Django version 1.11), et aidera à transférer rapidement le projet vers Django 2.0, ainsi qu'à éviter une perte de temps inutile pour l'analyse et la recherche des solutions aux erreurs courantes.