2020-04-08 作成: windows10/Python-3.8.2-amd64/Django-3.0.4
Django でユーザーの行動解析を行うためには、アクセス元の IP アドレスをログに残すだけでは不足しています。ユーザーを一意に識別するには、誰がアクセスしたかを HTTP サーバーのログに残すのが簡単です。
HTTP サーバーのログに Django のユーザー ID を残すには、レスポンスヘッダをカスタマイズします。汎用クラスビューで Django のユーザー ID をリクエストヘッダに追加する方法を書いておきます。
参考
https://blog.howtelevision.co.jp/entry/2014/09/05/170917
Django を初めて使う人は、こちら。
10 分で終わる Django の実用チュートリアル
レスポンスヘッダを追加したビュークラスを定義
追加したいレスポンスヘッダ userid を汎用ビュークラスに追加。
class CustomListView(generic.ListView):
def dispatch(self, *args, **kwargs):
response = super().dispatch(*args, **kwargs)
response['userid'] = self.request.user
return response
実際に呼び出すビュークラスを定義
ListView を継承するのではなく、CustomListView を継承して、実際に使用するビュークラスを宣言。
from .custom_views import *
from .models import MyClass
from django.contrib.auth.mixins import LoginRequiredMixin
class MemoListView(LoginRequiredMixin, CustomListView):
model = MyClass
ListView だけでなく他のビュークラスでも同様のことは可能。
Nginx などの HTTP サーバーの設定を変更して、新たに作成したレスポンスヘッダをログに残せば、ログにアクセス元が記録される。
おしまい