Segnali post_save e pre_delete
Eseguire codice quando cambiano i modelli
Segnali post_save e pre_delete è una lezione Django Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Django Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Django Academy include 4 lezioni in totale.
I signal in una frase
Un signal consente a una parte di Django di annunciare che è successo qualcosa, così altro codice può reagire senza essere chiamato direttamente.
Perché reagire agli eventi
A volte desidera eseguire effetti collaterali quando un model cambia, ad esempio inviare un'e-mail di benvenuto dopo la registrazione. I signal mantengono questa reazione separata dalla logica di salvataggio.
Il signal post_save
Il signal post_save viene attivato subito dopo che un'istanza del model è stata scritta nel database, quindi sa che la riga esiste già.
Un receiver post_save
Scrive una funzione e indica a Django di chiamarla quando viene attivato post_save. Il receiver riceve l'istanza salvata tramite i suoi argomenti.
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Profile)
def on_save(sender, instance, **kwargs):
print("saved", instance)Il flag created
post_save passa un booleano created: True per una riga appena creata, False per un aggiornamento. Lo utilizzi per eseguire il codice solo alla prima creazione.
def on_save(sender, instance, created, **kwargs):
if created:
print("new", instance)Il signal pre_delete
Il signal pre_delete viene attivato subito prima della rimozione di una riga, quindi l'istanza esiste ancora quando viene eseguito il Suo codice.
Un receiver pre_delete
Utilizzi pre_delete per ripulire le risorse correlate, ad esempio un file, prima che la riga del database scompaia. L'instance è ancora completamente disponibile.
from django.db.models.signals import pre_delete
@receiver(pre_delete, sender=Photo)
def clean_up(sender, instance, **kwargs):
instance.image.delete(save=False)Anche pre_save e post_delete
Django include anche pre_save e post_delete. Insieme coprono i momenti immediatamente precedenti e successivi a ogni scrittura o eliminazione.
L'argomento sender
Il sender indica quale classe di model ha attivato il signal. Passi sender= a un receiver affinché ascolti un solo model.
Accetti sempre kwargs
Ogni receiver dovrebbe accettare **kwargs. Django può passare argomenti aggiuntivi e, se mancano, si verifica un errore quando viene attivato il signal.
Disaccoppi, non nasconda la logica
I signal sono ideali per le reazioni trasversali, ma una logica complessa può diventare difficile da seguire. Ricorra a un signal quando la reazione è realmente separata.
Verifica rapida
Verifichi come post_save distingua le nuove righe dagli aggiornamenti.
Riepilogo: reagire agli eventi dei model
Ha conosciuto i signal di Django: post_save viene attivato dopo le scritture con un flag created, pre_delete prima delle rimozioni e ogni receiver dovrebbe accettare **kwargs. ✅
Impara Python con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Segnali post_save e pre_delete» è gratuita?
Sì — il testo completo di «Segnali post_save e pre_delete» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Django Academy, passa a CoddyKit PRO. Il corso Django Academy include 4 lezioni in totale.
Cosa imparerò in «Segnali post_save e pre_delete»?
Eseguire codice quando cambiano i modelli Eserciti Django Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Django Academy?
Non è richiesta alcuna esperienza precedente. Django Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Segnali post_save e pre_delete»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Django Academy?
Sì. Ogni lezione Django Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Segnali post_save e pre_delete
- Collegare correttamente i receiver
- Scrivere middleware personalizzato
- Ordine del middleware e process_view