Hola, hoy me gustaría contarles cómo actualizar un proyecto de la versión 1.9 a la 2.0. ¿Cuáles son los principales matices a considerar y reescribir para que el proyecto comience en la nueva versión de Django?
Primer paso
Esta es una actualización de Django a la versión 2.0, así como una actualización de todos los paquetes relacionados que se utilizan en el proyecto, como Uso el entorno virtual y los requisitos.txt, entonces para mí esta es una forma, para ti puede ser diferente.
Una vez que haya actualizado todos los paquetes, no debe iniciar el proyecto, no comenzará de todos modos, por lo tanto, proceda inmediatamente a corregir todos los puntos principales para que el proyecto se inicie.
Segundo paso Actualizando todas las urls.py de tu proyecto
En su urls.py principal, en el que incluye URL de otras aplicaciones, conectamos:
desde django.urls import re_path, ruta.
Y cambiamos c url a ruta, así como también eliminamos expresiones regulares en estas conexiones.
url(r'^ some/', include('some.urls')),
Si está utilizando vistas directamente desde esta aplicación, que requiere clientes habituales, entonces usamos:
re_path(r'^app/$', App.as_view(), name='app')
En las aplicaciones de complemento (por ejemplo, some / urls.py), en el archivo urls.py, utilizamos:
re_path(r'^create/$', Create.as_view(), name='create')
Si usa el espacio de nombres en las URL durante la inclusión, elimínelas desde allí y transfiéralas directamente a la aplicación conectada. Vamos a urls.py de esta aplicación y la escribimos arriba urlpatterns = []
app_name = 'app-application'
Esta línea actúa como un reemplazo para el espacio de nombres y está diseñada para hacer que el urls.py principal sea más limpio y legible, así como para la conveniencia de cambiar nombres en un solo lugar.
Tercer paso
Usamos la búsqueda durante todo el proyecto, dependiendo del editor de código que use durante el desarrollo, estas pueden ser diferentes teclas de acceso rápido, creo que las conoce, así que no me detendré aquí.
Conducimos en:
is_authenticated()
Y cambie a
is_authenticated
. Ahora esto no es un método, sino una propiedad. Este error arrojará una excepción.
Además en el proyecto que estamos buscando:
from django.core.urlresolvers import reverse
Y cambia a:
from django.urls import reverse
Cuarto paso
Ahora en todos los modelos. ForeignKey, debe haber un argumento posicional obligatorio "on_delete", por ejemplo:
on_delete=models.CASCADE on_delete=models.DO_NOTHING on_delete=models.SET_NULL
A continuación hacemos:
python manage.py makemigrations python manage.py migrate
Quinto paso
Si intenta iniciar el proyecto, ya debería comenzar, pero inmediatamente le dará un error tan pronto como vaya a 127.0.0.1:8000.
El error será el siguiente:
AttributeError at / 'WSGIRequest' object has no attribute 'user'
Se debe a que necesita cambiar el nombre de MIDDLEWARE_CLASSES a MIDDLEWARE
A continuación, obtendrá el siguiente error en la consola:
django.core.exceptions.ImproperlyConfigured: WSGI application 'application' could not be loaded; Error importing module: 'application doesn't look like a module path
Este error se produce porque tiene un middleware antiguo y debe actualizarlo para:
'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'
Sexto paso
Si usa su propio middleware en el proyecto, debe heredarlo de MiddlewareMixin y no del objeto (también puede usar el objeto, pero luego debe registrar los métodos adicionales requeridos).
Importar:
from django.utils.deprecation import MiddlewareMixin
Eso es todo! :)
Por supuesto, si tiene un proyecto muy grande y utiliza una gran cantidad de paquetes, tendrá más problemas, pero una cadena de errores en la consola lo ayudará a resolverlos y comenzar el proyecto en el modo adecuado. Esta guía describe los principales errores y métodos para resolverlos que son relevantes para todos los proyectos con Django 1.9 (algunos puntos no son relevantes para Django versión 1.11), y ayudará a transferir el proyecto a Django 2.0 más rápido, así como a evitar la pérdida innecesaria de tiempo para analizar y buscar soluciones a errores comunes.