Sinyal¶
Sebuah daftar dari semua sinyal yang Django kirim. Semua sinyal siap-pakai dikirim menggunakan metode send()
.
lihat juga
Lihat dokumentasi pada signal dispatcher untuk informasi menurut bagaimana mendaftarkan dan menerima sinyal.
authentication framework mengirim signals when a user is logged in / out.
Sinyal model¶
Modul django.db.models.signals
menentukan sekumpulan sinyal dikirim oleh sistem model.
Peringatan
Banyak dari sinyal-sinyal ini dikirim oleh beragam metode model seperti __init__()
atau save()
yang anda dapat timpa dalam kode anda sendiri.
Jika anda menimpa model-model ini pada model anda, anda harus memanggil metode kelas' induk untuk sinyal-sinyal ini dikirim.
Catat juga bahwa Django menyimpan penangan sinyal sebagai acuan lemah secara awalan, jadi jika penangan adalah sebauh fungsi lokal, itu mungkin sampah dikumpulkan. Untuk mencegah ini, weak==False
ketika anda memanggil sinyal connect()
.
Catatan
Model signals sender
model can be lazily referenced when connecting a
receiver by specifying its full application label. For example, an
Answer
model defined in the polls
application could be referenced
as 'polls.Answer'
. This sort of reference can be quite handy when
dealing with circular import dependencies and swappable models.
pre_init
¶
-
django.db.models.signals.
pre_init
¶
Whenever you instantiate a Django model, this signal is sent at the beginning
of the model's __init__()
method.
Argumen dikirim dengan dinyal ini:
sender
- Kelas model yang baru mempunyai sebuah instance yang dibuat.
args
- Sebuah list dari penempatan argumen dilewatkan ke
__init__()
: kwargs
- Sebuah dictionary dari argumen kata kunci dilewatkan ke
__init__()
:
Sebagai contoh, tutorial mempunyai baris ini:
p = Poll(question="What's up?", pub_date=datetime.now())
Argumen dikirim ke penangan pre_init
akan berupa:
Argument | Nilai |
---|---|
sender |
Poll (kelas itu sendiri) |
args |
[] (sebuah list kosong karena tidak ada argumen penempatan dilewatkan pada __init__() .) |
kwargs |
{'question': "What's up?", 'pub_date': datetime.now()} |
post_init
¶
-
django.db.models.signals.
post_init
¶
Seperti pre_init, tetapi satu ini dikirim ketika metode __init__()
selesai.
Argumen dikirim dengan dinyal ini:
sender
- Seperti diatas, kelas model yang baru mempunyai sebuah instance dibuat.
instance
- Instance sebenarnya dari model yang baru saja dibuat.
pre_save
¶
-
django.db.models.signals.
pre_save
¶
Ini dikirim pada awal dari metode save()
model.
Argumen dikirim dengan dinyal ini:
sender
- Kelas model.
instance
- Instance sebenarnya sedang disimpan.
raw
- A boolean;
True
if the model is saved exactly as presented (i.e. when loading a fixture). One should not query/modify other records in the database as the database might not be in a consistent state yet. menggunakan
- Nama lain basisdata sedang digunakan.
update_fields
- Kumpulan dari bidang untuk memperbaharui seperti dilewatkan ke
Model.save()
, atauNone
jikaupdate_fields
tidak dilewatkan kesave()
.
post_save
¶
-
django.db.models.signals.
post_save
¶
Seperti pre_save
, tetapi dikirim pada akhir dari metode save()
.
Argumen dikirim dengan dinyal ini:
sender
- Kelas model.
instance
- Instance sebenarnya sedang disimpan.
created
- Boolean;
True
jika sebuah rekaman baru telah dibuat. raw
- A boolean;
True
if the model is saved exactly as presented (i.e. when loading a fixture). One should not query/modify other records in the database as the database might not be in a consistent state yet. menggunakan
- Nama lain basisdata sedang digunakan.
update_fields
- Kumpulan dari bidang untuk memperbaharui seperti dilewatkan ke
Model.save()
, atauNone
jikaupdate_fields
tidak dilewatkan kesave()
.
pre_delete
¶
-
django.db.models.signals.
pre_delete
¶
Dikirim pada awal dari metode delete()
model dan metode delete()
queryset.
Argumen dikirim dengan dinyal ini:
sender
- Kelas model.
instance
- Instance sebenarnya sedang dihapus.
menggunakan
- Nama lain basisdata sedang digunakan.
post_delete
¶
-
django.db.models.signals.
post_delete
¶
Like pre_delete
, but sent at the end of a model's
delete()
method and a queryset's
delete()
method.
Argumen dikirim dengan dinyal ini:
sender
- Kelas model.
instance
Instance sebenarnya sedang dihapus.
Catat bahwa obyek tidak akan lagi berada dalam basisdata, jadi waspadalah apa yang anda lakukan dengan contoh ini.
menggunakan
- Nama lain basisdata sedang digunakan.
m2m_changed
¶
-
django.db.models.signals.
m2m_changed
¶
Dikirim ketika a ManyToManyField
dirubah pada instance model. Berbicara dengan ketat, ini bukan sebuah sinyal model karena itu dikirim oleh ManyToManyField
, tetapi sejak itu melengkapi pre_save
/post_save
dan pre_delete
/post_delete
ketika itu datang untuk melacak perubahan pada model, itu disertakan disini.
Argumen dikirim dengan dinyal ini:
sender
- The intermediate model class describing the
ManyToManyField
. This class is automatically created when a many-to-many field is defined; you can access it using thethrough
attribute on the many-to-many field. instance
- The instance whose many-to-many relation is updated. This can be an
instance of the
sender
, or of the class theManyToManyField
is related to. action
Sebuah string menunjukkan jenis dari pembaharuan yang selesai pada hubungan. Ini dapat berupa satu dari berikut:
"pre_add"
- Dikirim sebelum satu atau lebih obyek ditambahkan ke hubungan.
"post_add"
- Dikirim setelah satu atau lebih obyek ditambahkan pada hubungan.
"pre_remove"
- Dikirim sebelum satu atau lebih obyek dipindahkan dari hubungan.
"post_remove"
- Dikirim setelah satu atau lebih obyek dipindahkan dari hubungan.
"pre_clear"
- Dikirim sebelum hubungan dibersihkan.
"post_clear"
- Dikirim*setelah* hubungan dibersihkan.
reverse
- Indicates which side of the relation is updated (i.e., if it is the forward or reverse relation that is being modified).
model
- Kelas dari obyek-byek yang ditambahkan juga, dipindahkan dari atau dibersihkan dari hubungan.
pk_set
For the
pre_add
,post_add
,pre_remove
andpost_remove
actions, this is a set of primary key values that have been added to or removed from the relation.Untuk tindakan
pre_clear
danpost_clear
, ini adalahNone
.menggunakan
- Nama lain basisdata sedang digunakan.
Sebagai contoh, jika sebuah Pizza
dapat memiliki banyak obyek Topping
, dimodelkan seperti ini:
class Topping(models.Model):
# ...
pass
class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
Jika kami menghubungkan penangan seperti ini:
from django.db.models.signals import m2m_changed
def toppings_changed(sender, **kwargs):
# Do something
pass
m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
dan kemudian lakukan sesuatu seperti ini:
>>> p = Pizza.objects.create(...)
>>> t = Topping.objects.create(...)
>>> p.toppings.add(t)
argumen-argumen dikirim ke penangan m2m_changed
(toppings_changed
dalam contoh diatas) akan menjadi:
Argument | Nilai |
---|---|
sender |
Pizza.toppings.through (kelas m2m menengah) |
instance |
p (instance``Pizza`` sedang dirubah) |
action |
"pre_add" (diikuti oleh sinyal terpisah dengan "post_add" ) |
reverse |
False (Pizza contains the
ManyToManyField , so this call
modifies the forward relation) |
model |
Topping (kelas dari obyek ditambahkan pada Pizza ) |
pk_set |
{t.id} (sejak hanya Topping t yang ditambahkan ke hubungan) |
menggunakan |
"default" (sejak kiriman perute awalan ditulis disini) |
Dan jika kami akan kemudian melakukan seperti ini:
>>> t.pizza_set.remove(p)
argumen dikirim ke penangan m2m_changed
akan berupa:
Argument | Nilai |
---|---|
sender |
Pizza.toppings.through (kelas m2m menengah) |
instance |
t (instance Topping sedang dirubah) |
action |
"pre_remove" (diikuti oleh sinyal terpisah dengan "post_remove" ) |
reverse |
True (Pizza mengandung ManyToManyField , jadi panggilan ini merubah hubungan kebalikan) |
model |
Pizza (kelas dari obyek dipindahkan dari Topping ) |
pk_set |
{p.id} (sejak hanya Pizza p telah dipindahkan dari hubungan) |
menggunakan |
"default" (sejak kiriman perute awalan ditulis disini) |
class_prepared
¶
-
django.db.models.signals.
class_prepared
¶
Sent whenever a model class has been "prepared" -- that is, once model has been defined and registered with Django's model system. Django uses this signal internally; it's not generally used in third-party applications.
Sejak sinyal ini dikirim selama pengolahan pengumpulan registrar aplikasi, dan AppConfig.ready()
berjalan setelah registrar sepenuhnya dikumpulkan, penerima tidak dapat dihubungkan di metode itu. Satu kemungkinan adalah menghubungkan mereka AppConfig.__init__()
sebagai gantinya, merawat tidak untuk mengimpor model atau panggilan pemicu pada registrar aplikasi.
Argumen-argumen yang dikirim dengan sinyal ini:
sender
- Kelas model yang telah dipersiapkan.
Pengelolaan sinyal¶
Sinyal dikirim oleh django-admin.
pre_migrate
¶
-
django.db.models.signals.
pre_migrate
¶
Sent by the migrate
command before it starts to install an
application. It's not emitted for applications that lack a models
module.
Argumen dikirim dengan dinyal ini:
sender
- Sebuah instance
AppConfig
untuk aplikasi tentang untuk dipindahkan/disinkronisasikan. app_config
- Sama seperti
sender
. verbosity
Menunjukkan seberapa banyak informasi manage.py dicetak pada layar. Lihat bendera
--verbosity
untuk rincian.Fungsi-fungsi yang mendengarkan untuk
pre_migrate
harus menyesuaikan apa mereka keluarkan ke layar berdasarkan pada nilai dari argumen ini.interactive
If
interactive
isTrue
, it's safe to prompt the user to input things on the command line. Ifinteractive
isFalse
, functions which listen for this signal should not try to prompt for anything.Sebagai contoh, aplikasi
django.contrib.auth
hanya menunjuk untuk membuat pengguna super ketikainteractive
adalahTrue
.menggunakan
- Nama lain dari basisdata dimana sebuah perintah akan beroperasi.
plan
- The migration plan that is going to be used for the migration run. While
the plan is not public API, this allows for the rare cases when it is
necessary to know the plan. A plan is a list of two-tuples with the first
item being the instance of a migration class and the second item showing
if the migration was rolled back (
True
) or applied (False
). apps
- Sebuah instance dari
Apps
mengandung keadaan dari proyek sebelum perpindahan berjalan. Itu harus digunakan sebagai gantinya dari registrarapps
global untuk mengambil model yang anda ingin lakukan tindakan.
post_migrate
¶
-
django.db.models.signals.
post_migrate
¶
Dikirim pada akhir dari migrate
(bahkan jika tidak ada perpindahan dijalankan) dan perintah flush
. Itu tidak dikeluarkan untuk aplikasi yang kekurangan modeul models
.
Handlers of this signal must not perform database schema alterations as doing
so may cause the flush
command to fail if it runs during the
migrate
command.
Argumen dikirim dengan dinyal ini:
sender
- Instance
AppConfig
untuk aplikasi yang telah dipasang. app_config
- Sama seperti
sender
. verbosity
Menunjukkan seberapa banyak informasi manage.py dicetak pada layar. Lihat bendera
--verbosity
untuk rincian.Fungsi-fungsi yang mendengarkan untuk
post_migrate
harus menyesuaikan apa mereka keluarkan ke layar berdasarkan pada nilai dari argumen ini.interactive
If
interactive
isTrue
, it's safe to prompt the user to input things on the command line. Ifinteractive
isFalse
, functions which listen for this signal should not try to prompt for anything.Sebagai contoh, aplikasi
django.contrib.auth
hanya menunjuk untuk membuat pengguna super ketikainteractive
adalahTrue
.menggunakan
- Nama lain basisdata digunakan untuk sinkronisasi. Awalan pada basisdata
default
. plan
- The migration plan that was used for the migration run. While the plan is
not public API, this allows for the rare cases when it is necessary to
know the plan. A plan is a list of two-tuples with the first item being
the instance of a migration class and the second item showing if the
migration was rolled back (
True
) or applied (False
). apps
- Sebuah instance dari
Apps
mengandung keadaan dari proyek setelah perpindahan berjalan. Itu harus digunakan sebagai gantinya dari registrarapps
global untuk mengambil model yang anda ingin lakukan tindakan.
Sebagai contoh, anda dapat mendaftarkan sebuah callback dalam sebuah AppConfig
seperti ini:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
def my_callback(sender, **kwargs):
# Your specific logic here
pass
class MyAppConfig(AppConfig):
...
def ready(self):
post_migrate.connect(my_callback, sender=self)
Catatan
If you provide an AppConfig
instance as the sender
argument, please ensure that the signal is registered in
ready()
. AppConfig
s are recreated for
tests that run with a modified set of INSTALLED_APPS
(such as
when settings are overridden) and such signals should be connected for each
new AppConfig
instance.
Sinyal permintaan/tanggapan¶
Sinyal dikirim oleh kerangka kerja inti ketika mengolah sebuah permintaan.
request_started
¶
-
django.core.signals.
request_started
¶
Dikirim ketika Django mulai mengolah sebuah permintaan HTTP.
Argumen dikirim dengan dinyal ini:
sender
- Kelas penangan -- misalnya
django.core.handlers.wsgi.WsgiHandler
-- yang menangani permintaan. environ
- Dictionary
environ
disediakan pada permintaan.
request_finished
¶
-
django.core.signals.
request_finished
¶
Dikirim ketika Django selesai mengirimkan sebuah tanggapan HTTP ke klien.
Argumen dikirim dengan dinyal ini:
sender
- Kelas penangan, seperti diatas.
got_request_exception
¶
-
django.core.signals.
got_request_exception
¶
Sinyal ini dikirim ketika Django menghadapi sebuah pengecualian selagi mengolah sebuah permintaan HTTP yang datang.
Argumen dikirim dengan dinyal ini:
sender
- Kelas penangan, seperti diatas.
request
- Obyek
HttpRequest
Sinyal percobaan¶
Sinyal hanya dikirim ketika running tests.
setting_changed
¶
-
django.test.signals.
setting_changed
¶
Sinyal dikirim ketika nilai dari pengaturan berubah melalui pengelola konteks django.test.TestCase.settings()
atau pengelola penghias/konteks django.test.override_settings()
.
It's actually sent twice: when the new value is applied ("setup") and when the
original value is restored ("teardown"). Use the enter
argument to
distinguish between the two.
Anda dapat juga mengimpor sinyal dari django.core.signals
untuk menghindari impor dari django.test
dalam keadaan bukan-percobaan.
Argumen dikirim dengan dinyal ini:
sender
- Penangan percobaan.
setting
- Nama dari pengaturan.
value
- Nilai dari pengaturan setelah berubah. Untuk pengaturan yang awalnya tidak ada, dalam fase "teardown",
value
adalahNone
. enter
- Boolean;
True
jika pengaturan diberlakukan,False
jika disimpan kembali.
Pembungkus Basisdata¶
Sinyal dikirim oleh pembungkus basisdata ketika hubungan basisdata dimulai.
connection_created
¶
-
django.db.backends.signals.
connection_created
¶
Sent when the database wrapper makes the initial connection to the database. This is particularly useful if you'd like to send any post connection commands to the SQL backend.
Argumen dikirim dengan dinyal ini:
sender
- Kelas pembungkus basisdata -- yaitu.
django.db.backends.postgresql.DatabaseWrapper
ataudjango.db.backends.mysql.DatabaseWrapper
, dll. connection
- The database connection that was opened. This can be used in a multiple-database configuration to differentiate connection signals from different databases.