Migrando de Django 1.5 a 1.11
Javier Daza
Python Barranquilla
¿Por qué actualizar tu software?
¿Por qué actualizar tu software?
- Seguridad: Correcciones de vulnerabilidades
- Mejoras: Arreglo de errores y mejoras del producto
Enfoques
¿Cuales serían tus estrategias para migrar la aplicación?
Enfoques
- Crea un nuevo proyecto en la versión mas reciente de Django, pega tus modelos ahi y cruza los dedos
- Poco a poco, ve subiendo a la siguiente versión de Django de tu proyecto
Django
1.5
Notas de la versión
- Se puede extender el modelo User o reemplazarlo por uno personalizado
- Primer soporte "experimental" a Python 3
- Model.save() ahora acepta el argumento update_fields para especificar que campos se escriben a la DB.
-
El motor de template interpreta True, False y None com sus correspondientes objetos de Python
Cambios incompatibles hacia atrás
- ALLOWED_HOSTS se requiere en producción. Cuando DEBUG sea False
- Queda deprecado el uso de django.utils.simplejson por json
Para mayor información ve a Django 1.5 release notes
- Si no usas SECRET_KEY en los settings, te aparecerá un Warning
Adicionales
Django
1.6
Notas de la versión
- Se han simplificado y modernizado las plantillas por defecto de startproject y startapp.
- Conexiones persistentes en la DB. Se permite reutilizar una conexión para varias peticiones.
- Nuevo runner de Tests, django.test.runner.DiscoverRunner. Ahora podrás correr los tests en cualquier modulo cuyo nombre encaje al patrón test*.py.
- GeoDjango provee de form fields y widgets para sus campos geo-especializados.
Desuso
- El algoritmo de Model.save() cambió. Si existe una pk intenta hacer un UPDATE directamente. Ahora se usa 1 query en vez de 2.
- El metodo get_or_create no requiere, al menos, un argumento
Para mayor información ve a Django 1.6 release notes
- Se dejará de soportar django.contrib.comments
Django
1.7
Notas de la versión
- Migraciones. El comando syncdb será reemplazado por migrate. Se utilizará un nuevo comando llamado makemigrations.
- Métodos QuerySet desde el Manager
- Nuevo System check framwork. Se utiliza para validar proyectos de Django, deteca problemas comunes y te da pistas para arreglarlos.
- Nuevo objeto Prefetch para personalizar operaciones con prefetch_related()
- Warnings por usar SITE_ID, MANAGERS, TEMPLATE_LOADERS, ADMINS o XFrameOptionsMiddleware. Agregar BASE_DIR.
-
Mejoras en el comando runserver
- En sistemas Linux, si tienes instalado pyinotify, el servidor de desarrollo cargará automáticamente, no habrá un pequeño delay
- Automáticamente recargará las traducciones
- Todas las peticiones HTTP se mostrarán en la consola
- El método QuerySet.update_or_create fue añadido
Para mayor información ve a Django 1.7 release notes
Cambios incompatibles hacia atrás
- Scripts WSGI
-
Se removieron los sgtes Middlewares del default:
- SessionMiddleware
- AuthenticationMiddleware
- MessageMiddleware
# ANTES
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
# AHORA
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Django
1.8
Notas de la versión
- Soporta Python 3.5
-
Nuevos tipos de datos
- UUIDField para guardar identificadores únicos universales
- DurationField para guardar periodos de tiempo modelados en Python por timedelta.
- Expresiones en los queries
- Condicionales en los queries (WHEN y CASE).
- WarniFunciones de bases de datos, como Coalesce, Concat y Substr.
- Se eliminan django.contrib.comments. Recomiendo reemplazarlos por django_comments en INSTALLED_APPS.
- EL comando runserver usa hilos daemon para recargar más rápido.
- select_related ahora verifica que el campo dado exista en realidad
Para mayor información ve a Django 1.8 release notes
Notas de la versión
-
Cambian las django.conf.urls.patterns()
- Pasan de ser tuplas a listas
# ANTES
urlpatterns = patterns('',
url('^$', 'myapp.views.myview'),
)
# AHORA
from django.conf.urls import url
from myapp import views
urlpatterns = [
url('^$', views.myview),
url('^other/$', views.otherview),
]
Django
1.9
Notas de la versión
- Realizando acciones luego de una transacción con la DB. Es útil para tareas como enviar emails, crear tareas en cola o invalidar caches.
- Validador de contraseñas AUTH_PASSWORD_VALIDATORS
- Nuevo diseño del administrador.
- Se pueden correr tests en paralelo en multiples procesos.
- Las migraciones iniciales se marcan con un initial = True para ayudar a migrate --fake-initial a detectarlas fácilmente.
-
En el settings.py las tuplas se volvieron listas
-
La variable TEMPLATES pasa a ser una lista, incluyendo las variables TEMPLATES_DIRS,
TEMPLATE_LOADERS, TEMPLATE_CONTEXT_PROCESSORS
y TEMPLATE_DEBUG entre otras. - MIDDLEWARE_CLASSES también pasaron a ser una lista
-
La variable TEMPLATES pasa a ser una lista, incluyendo las variables TEMPLATES_DIRS,
Para mayor información ve a Django 1.9 release notes
Django
1.10
Notas de la versión
- Búsqueda de texto completo para PostgreSQL
-
Reemplazar STATIC_URL por
- load static en vez de load staticfiles o load static from staticfiles
- <img src="{% static 'img/imagen.png' %}">
- MIDDLEWARE_CLASSES cambian a MIDDLEWARE. La sintaxis para hacer personalizados también cambió
- Soporte en UNICODE para Usernames
- Se añade soporte para Argon2 password hash (no viene instalado por defaul porque requiere librerias de terceros).
- Quitaron los hashers de contraseña débiles de la configuración predeterminada PASSWORD_HASHERS
Para mayor información ve a Django 1.10 release notes
Cambios incompatibles hacia atrás
- Select_related() prohíbe campos no relacionales para relaciones anidadas
- runserver ahora pasa por logging. Ahora maneja las peticiones y respuestas por medio de django.server. Si sobreescribres el logging o lo personalizas, recuerda tomar las medidas para ver el output del runserver también
Django
1.11
Notas de la versión
- La serie de Django 1.11.x es la última en soportar Python 2.x. La próxima versión de Django, Django 2.0 solo soportará desde Python 3.5
- Las advertencias de descontinuación ya no aparecerán por defecto.
- La nueva opción loaddata --exclude permite excluir modelos y aplicaciones mientras se cargan datos de fixtures.
- Las migraciones se añade soporte para la serialización de objetos uuid.UUID.
- Jinja2 ahora soporte context_processors.
- GDAL ahora es requerido como dependencia para GeoDjango.
- PostgreSQL 9.3 será la mínima versión que soporte
- Se quita el soporte para settings.TIME_ZONE = None.
- Se empezará a advertir las excepciones {% include %} cuando se haga render. Ya no serán silenciosas.
Para mayor información ve a Django 1.11 release notes
Recomendaciones finales
-
Ver el plan de obsoletos (deprecated plan)
-
Ver en la documentación de tu host sugerencias sobre como hacer las migraciones.
-
Hacer backup de tus datos
-
Tener bastante paciencia
Migrando de Django 1.5 a 1.11
By Javier D
Migrando de Django 1.5 a 1.11
- 1,821