Django v1.0 documentation

組み込みシグナルリファレンス

revision-up-to:8961 (1.0)

ここでは、 Django が送信する組み込みのシグナルについて解説します。

モデル関連のシグナル

django.db.models.signals モジュールでは、モデルシステムから送信され るシグナルを定義しています。

Warning

ここに挙げるシグナルの多くは、 __init__()save() といった、オーバライド可能な様々 なメソッドから送信されます。

従って、これらのメソッドをオーバライドする場合、親クラスのメソッドを呼 び出して、シグナルが送信されるようにせねばなりません。

pre_init

django.db.models.signals.pre_init

Django モデルをインスタンス化するとき、モデルの __init__() 処理の最初の段階で送信されます。

シグナルの引数は以下の通りです:

sender
インスタンスを作成したモデルクラスです。
args
__init__() に渡された固定引数のリスト です。
kwargs
__init__() に渡されたキーワード引数の リストです。

例えば、 チュートリアル には以下のような行があり ます:

p = Poll(question="What's up?", pub_date=datetime.now())

この行の中で送信されるシグナルを pre_init ハンドラで受けたときの引 数は以下の通りです:

引数
sender Poll (クラス自体)
args [] (__init__ には固定引数がないので空)
kwargs {'question': "What's up?", 'pub_date': datetime.now()}

post_init

django.db.models.signals.post_init

pre_init とほぼ同じですが、 __init__() の処理が終る直前に送信されます。

引数は以下の通りです:

sender
pre_init と同じ、インスタンスを生成したモデルクラスです。
instance
実際に生成されたモデルインスタンスです。

pre_save

django.db.models.signals.pre_save

モデルインスタンスの save() の処理の最初に呼 び出されます。

引数は以下の通りです:

sender
モデルクラスです。
instance
これから保存されるインスタンスです。

post_save

django.db.models.signals.post_save

pre_save に似ていますが、 save() メソッ ドの処理の最後に呼び出されます。

引数は以下の通りです

sender
モデルクラスです。
instance
保存されたインスタンスです。
created
ブール値で、レコードが新たに作成されたときに True を返します。

pre_delete

django.db.models.signals.pre_delete

モデルインスタンスの delete() メソッドの処理 の先頭で呼出されます。

引数は以下の通りです:

sender
モデルクラスです。
instance
削除されるインスタンスです。

post_delete

django.db.models.signals.post_delete

pre_delete に似ていますが、 delete() メソッドの処理の最後に呼び出されます。

引数は以下の通りです:

sender
モデルクラスです。
instance

削除されたインスタンスです。

オブジェクトはもはやデータベース上に存在しないので、このインスタン スの扱いには十分注意してください。

class_prepared

django.db.models.signals.class_prepared

モデルクラスの「準備が完了した」ときに呼び出されます。準備の完了とは、モデ ルの定義が読み込まれ、 Django のモデルシステムに組み込まれたことを示します。 Django はこのシグナルを内部的に使っています。通常は、サードパーティ製のアプ リケーションでは使いません。

引数は以下の通りです:

sender
準備の完了したモデルクラスです。

管理コマンド関連のシグナル

django-admin の送信するシグナルです。

post_syncdb

django.db.models.signals.post_syncdb

syncdb でアプリケーションがインストールされると送信されます。

このシグナルを待ち受けるハンドラは、 INSTALLED_APPS に登録されて いるいずれかのアプリケーションの management モジュール内に定義せねばな りません。それ以外の場所にハンドラを定義しても、 syncdb はハンド ラをロードしません。

引数は以下の通りです:

sender
インストールされた models モジュールです。つまり、 syncdb"foo.bar.myapp" という名前のアプリケーショ ンをインストールすると、 sender には foo.bar.myapp.models モジュールが入ります。
app
sender と同じです。
created_models
syncdb が生成した全てのモデルクラスからなるリストです。
verbosity

manage.py がどれくらいの情報をスクリーンに表示しているかを示す値で す。詳しくは --verbosity` フラグを参照してください。

post_syncdb を待ち受けている関数は、この引数の値に従って、 スクリーンに表示するメッセージの量を調整してください。

interactive
interactiveTrue の場合、ユーザにコマンドプロンプトを提 示してもかまいません。 interactiveFalse であれば、シグ ナルを待ち受ける関数は、ユーザにプロンプトを表示してはなりません。

リクエスト/レスポンス関連のシグナル

コアフレームワークがリクエストを処理する際に送信するシグナルです。

request_started

django.core.signals.request_started

Djang が HTTP リクエストを送信する直前に送信されます。

引数は以下の通りです:

sender
リクエストを処理するハンドラクラス、すなわち django.core.handlers.modpython.ModPythonHandlerdjango.core.handlers.wsgi.WsgiHandler です。

request_finished

django.core.signals.request_finished

Django が HTTP リクエストの処理を終了した直後に呼び出されます。

引数は以下の通りです:

sender
上と同じく、ハンドラクラスです。

got_request_exception

django.core.signals.got_request_exception

このシグナルは、 Django が HTTP リクエストの処理中に例外に遭遇したときに送 信されます。

引数は以下の通りです:

sender
上と同じく、ハンドラクラスです。
request
HttpRequest オブジェクトです。

テスト関連のシグナル

テストの実行中 にのみ送信されるシグナルです。

template_rendered

django.test.signals.template_rendered

テストシステムがテンプレートをレンダするときに送信されます。このシグナルは、 通常の Django サーバの操作では送信されず、テスト中しか使えません。

引数は以下の通りです:

sender
これからレンダされる Template テンプレー トオブジェクトです。
template
sender と同じ値です。
context
テンプレートをレンダするときに渡される Context です。