Las señales de guardar/eliminar son generalmente favorables en situaciones donde necesita realizar cambios que no son completamente específicos del modelo en cuestión, o podrían aplicarse a modelos que tienen algo en común, o podrían configurarse para su uso en modelos.
Una tarea común en los métodos reemplazados save
es la generación automática de babosas desde algún campo de texto en un modelo. Ese es un ejemplo de algo que, si necesitara implementarlo para una serie de modelos, se beneficiaría del uso de una señal pre_save
, donde el manejador de señal podría tomar el nombre del campo slug y el nombre del campo para generar el slug de . Una vez que tenga algo así en su lugar, cualquier funcionalidad mejorada que implemente también se aplicará a todos los modelos, p. buscando la babosa que está a punto de agregar para el tipo de modelo en cuestión, para garantizar la singularidad. Las aplicaciones reutilizables suelen beneficiarse del uso de señales. Si la funcionalidad que proporcionan se puede aplicar a cualquier modelo, generalmente (a menos que sea inevitable) no querrán que los usuarios tengan que modificar directamente sus modelos para beneficiarse de ellas. eso.
Con django-mptt, por ejemplo, he utilizado la señal de pre_save
para gestionar un conjunto de campos que describen una estructura de árbol para el modelo que está a punto de ser creado o actualizado y la señal de pre_delete
para eliminar detalles de la estructura de árbol para ser el objeto eliminado y todo su subárbol de objetos antes de él y se eliminan. Debido al uso de señales, los usuarios no tienen que agregar o modificar los métodos save
o delete
en sus modelos para realizar esta gestión, solo tienen que dejar que django-mptt sepa qué modelos quieren que administre.
No, señales de bloqueo a menos que desovan las discusiones de forma explícita. – muhuk
@muhuk tiene razón, las señales bloquean sus procesos. Si desea evitar procesos bloqueados, use herramientas como gevent, apio u otras herramientas asincrónicas. – pydanny
Le doy un -1 debido a los puntos de muhuk y pydanny. Parece que es un consejo totalmente equivocado. La solicitud no finalizará hasta que se complete el procesamiento de la señal. Así que el apio parece una buena solución, que es lo que normalmente uso en mis proyectos django. –