[解決済み] Django: ユーザーがログインしたらシグナルを送る?
質問
私の Django アプリでは、ユーザがログインしたときにいくつかの定期的なバックグラウンドジョブの実行を開始し、ユーザがログアウトしたときにそれらの実行を停止する必要があるので、エレガントな方法を探しています。
- ユーザーのログイン/ログアウトの通知を受ける
- ユーザのログイン状態を問い合わせる
私の見解では、理想的な解決策は
-
によって送信される信号が
django.contrib.auth.views.login
と... views.logout
-
方法
django.contrib.auth.models.User.is_logged_in()
に類似した... User.is_active()
または... User.is_authenticated()
Django 1.1.1 にはそれがないので、ソースにパッチを当てて追加するのは気が進みません (とにかく、その方法がよくわかりません)。
一時的な解決策として、私は
is_logged_in
ブール値フィールドを UserProfile モデルに追加しました。このフィールドはデフォルトではクリアされ、ユーザーがランディングページに最初にアクセスしたときに設定されます (
LOGIN_REDIRECT_URL = '/'
によって定義される) に設定され、その後のリクエストで照会されます。私はそれをUserProfileに追加しました。その目的のためだけに組み込みのUserモデルから派生してカスタマイズする必要がないようにです。
私はこのソリューションが好きではありません。ユーザーが明示的にログアウトボタンをクリックした場合、私はフラグをクリアすることができますが、ほとんどの場合、ユーザーはページを離れるか、ブラウザを閉じます。その上 (それはむしろデータモデルの明快さの小出しですが)。
is_logged_in
はUserProfileに属するものではなく、Userモデルに属するものです。
誰か代替のアプローチを考えることができますか?
どのように解決するのですか?
次のようなシグナルを使うことができます(私はmodels.pyに入れました)。
from django.contrib.auth.signals import user_logged_in
def do_stuff(sender, user, request, **kwargs):
whatever...
user_logged_in.connect(do_stuff)
django のドキュメントを参照してください。 https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals そして、ここ http://docs.djangoproject.com/en/dev/topics/signals/
関連
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] Djangoの "slug "とは何ですか?
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決