Bullet proofing Django models

Related: We recently added a bank account like functionality into one of our products. During the development we encountered some textbook problems and I thought it can be a good opportunity to go over some of the patterns we use in our Django models. This article was written in the order in which we usually address new problems: Define the business requirements. Write down a naive implementation and model definition. Challenge the solution. Refine and repeat. » Haki Benita | medium.com

November 7, 2016 · 1 min · 81 palabras · Nacho Cano

Exclusión de URLs cuando usamos django-debug-toolbar

django-debug-toolbar es una aplicación para Django que nos muestra información de depuración acerca de las diferentes peticiones y respuestas que se llevan a cabo en el servidor: variables de contexto, cabeceras, peticiones SQL, etc. Sin embargo, hay algunas URLs para las cuales nos puede interesar que no se analicen, como por ejemplo, peticiones que se hagan por Ajax o URLs relativas a diversas aplicaciones instaladas, como el panel de administración, Rosetta, etc. ...

May 15, 2014 · 1 min · 177 palabras · Nacho Cano

Cambiar la contraseña de administrador en Django 1.2

A partir de Django 1.2 se ha añadido el comando manage.py changepassword. $ ./manage.py changepassword ['username'] Si no proporcionamos un nombre de usuario se intentará cambiar el nombre de usuario que concuerde con el del usuario que ha iniciado sesión. Este comando nos ahorra escribir lo siguiente: >>> from django.contrib.auth.models import User >>> u = User.objects.get(username__exact='john') >>> u.set_password('new password') >>> u.save() El usuario administrador es el primer usuario del sistema por lo que podemos escribir: ...

February 16, 2011 · 1 min · 149 palabras · Nacho Cano

Buscar en todos los campos de un modelo en Django

Una acción típica que se va a repetir en, prácticamente, cada listado que mostremos, es la de añadir un buscador [1]. Un buscador típico incluirá un pequeño formulario en la misma página de listado: <form method="get" action=""> <input type="text" name="q" value="{{ q }}" /> <input type="submit" value="Search" /> Nos interesaría no tener que ir copiando y pengando este código en cada listado. Aunque sea un código que no vaya a cambiar, viola el principio de DRY. ...

November 19, 2010 · 3 min · 580 palabras · Nacho Cano

Control de concurrencia optimista en Django

Si tenemos una aplicación multiusuario, podría darse el caso de que dos usuarios accediesen simultáneamente al mismo registro para editarlo. Si no controlamos este evento, sucederá que el primero que guarde, que no tiene porqué ser el primero que comenzó a editar, perderá los cambios, y lo que es peor, sin enterarse. Una solución sería utilizar transacciones [1], pero éstas deberían abarcar varias peticiones HTTP, desde que se empieza a editar hasta que se guarda satisfactoriamente (o no), con lo que la solución idónea se complica. Una solución más sencilla, pero efectiva en la inmensa mayoría de casos, es utilizar el control de concurrencia optimista (también comentado en slashdot). ...

November 5, 2010 · 3 min · 527 palabras · Nacho Cano

Actualización recursiva de un diccionario en Python

Cuando actualizamos un diccionario con otro en Pyhton, el método update copia las entradas del diccionario fuente en el diccionario destino, sobreescribiendo las de éste si la entrada existe en ambos diccionarios. En particular, si un diccionario contiene una entrada que es a su vez otro diccionario, no se realiza una actualización sobre ésta, por lo que se pierden los valores que no estuvieran en el diccionario fuente. Ilustremos este comportamiento con un ejemplo: ...

September 28, 2010 · 3 min · 529 palabras · Nacho Cano