私の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モデルから派生してカスタマイズする必要はありません。
私はこの解決策が好きではありません。ユーザーが明示的にログアウトボタンをクリックした場合、フラグをクリアできますが、ほとんどの場合、ユーザーはページを離れるか、ブラウザーを閉じるだけです。これらの場合にフラグをクリアすることは、私には簡単ではないようです。その上(それはむしろデータモデルの明快さのニッチピッキングです)、UserProfileにis_logged_in
は属していませんが、Userモデルに属しています。
誰かが別のアプローチを考えることができますか?