0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Django 汎用クラスビューでアクセス元を一意に識別する方法

Last updated at Posted at 2020-04-09

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 を汎用ビュークラスに追加。

custom_views.py
class CustomListView(generic.ListView):
    def dispatch(self, *args, **kwargs):
        response = super().dispatch(*args, **kwargs)
        response['userid'] = self.request.user
        return response

実際に呼び出すビュークラスを定義

ListView を継承するのではなく、CustomListView を継承して、実際に使用するビュークラスを宣言。

views.py
from .custom_views import *
from .models import MyClass
from django.contrib.auth.mixins import LoginRequiredMixin

class MemoListView(LoginRequiredMixin, CustomListView):
    model = MyClass

ListView だけでなく他のビュークラスでも同様のことは可能。

Nginx などの HTTP サーバーの設定を変更して、新たに作成したレスポンスヘッダをログに残せば、ログにアクセス元が記録される。

おしまい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?