Django es un marco de trabajo de desarrollo web en Python que promueve el rápido desarrollo y diseño limpio y pragmático. Las señales de Django son una forma de permitir que ciertos trozos de código sean notificados cuando se realizan ciertas acciones. Son un tipo de mecanismo de comunicación entre los componentes de una aplicación Django.
En pocas palabras, las señales de Django permiten que ciertas funciones sean llamadas cuando un evento específico, como guardar un modelo o eliminar un usuario, ocurre en otra parte de la aplicación. Actúan como un disparador, para que cuando un evento específico ocurra en la aplicación, las funciones asociadas con esa señal sean ejecutadas.
Podríamos tomar como ejemplo a un blog. Siempre que se crea un nuevo post, tal vez quieras enviar un correo electrónico a tus seguidores para informarles sobre el nuevo contenido. En este caso, puedes conectar una función de envío de correo a una señal que se dispara cada vez que se guarda un nuevo post en la base de datos.
Django incluye un conjunto de señales incorporadas que permiten ciertos fragmentos de código responder a acciones del sistema, estos son algunos ejemplos de ellas:
1. `django.db.models.signals.pre_save` y `django.db.models.signals.post_save`: Estas señales se disparan justo antes y después de que un objeto se guarde en la base de datos respectivamente.
2. `django.db.models.signals.pre_delete` y `django.db.models.signals.post_delete`: Estas señales se disparan justo antes y después de que un objeto se elimina de la base de datos respectivamente.
3. `django.core.signals.request_started` y `django.core.signals.request_finished`: Estas señales se disparan al inicio y al final de cada solicitud.
Para utilizar las señales en Django, debes definir la señal y luego conectarla a una o más funciones. Esta conexión se realiza llamando a la función `connect()` en una señal y pasándole la función que deseamos conectar a dicha señal. También, Django te permite crear tus propias señales.
Aquí hay un ejemplo de cómo podrías conectar una función a una señal en Django:
```python
from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(post_save, sender=MyModel)
def my_model_save_handler(sender, instance, created, **kwargs):
if created:
print(“A new MyModel was created!”)
else:
print(“A MyModel was saved!”)
```
La funcion `my_model_save_handler()` será llamada cada vez que un objeto `MyModel` sea guardado.
Para más información sobre las señales en Django puedes consultar la documentación oficial (https://docs.djangoproject.com/es/3.2/topics/signals/) que ha sido la fuente principal para la construcción de esta respuesta.