23

Django セッションを使用していますが、管理インターフェイスでセッション データを表示する方法が必要です。これは可能ですか?

つまり、セッションごとに、セッションデータベースに保存されているデータを確認したいと考えています(収集できる限り、これは基本的に辞書です)。

現在、次のようなハッシュがSession dataフィールドに表示されているだけです。

gAJ9cQEoVQ5zb3J0aW5nX2Nob2ljZXECVQJQT3EDVQxnYW1lc19wbGF5ZWRxBH1xBVgLAAAAcG9z
dG1hbi1wYXRxBksDc1UKaXBfYWRkcmVzc3EHVQkxMjcuMC4wLjFxCFUKdGVzdGNvb2tpZXEJVQZ3
b3JrZWRxClUKZ2FtZV92b3Rlc3ELfXEMdS4wOGJlMDY3YWI0ZmU0ODBmOGZlOTczZTUwYmYwYjE5
OA==


これを実現するために、次を admin.py に入れました。

from django.contrib.sessions.models import Session
...
admin.site.register(Session)


特に、少なくとも各セッションの IP アドレスを確認できるようにしたいと考えていました。(IP アドレスごとのセッション数をカウントし、それぞれの合計セッション数に基づいて IP を並べ替えることができれば、それもいいでしょう。)

ご協力ありがとうございました :-)

4

5 に答える 5

37

次のようなことができます。

from django.contrib.sessions.models import Session
class SessionAdmin(ModelAdmin):
    def _session_data(self, obj):
        return obj.get_decoded()
    list_display = ['session_key', '_session_data', 'expire_date']
admin.site.register(Session, SessionAdmin)

get_decodedをlist_displayで直接使用できることさえあるかもしれません。これが正常に機能しない原因がいくつかある場合は、リンクされた Django ソースに基づいて、セッション データを自分でデコードできます。

于 2011-02-12T13:15:02.807 に答える
16

Tomaszの答えから続けて、私は行きました:

import pprint
from django.contrib.sessions.models import Session
class SessionAdmin(admin.ModelAdmin):
    def _session_data(self, obj):
        return pprint.pformat(obj.get_decoded()).replace('\n', '<br>\n')
    _session_data.allow_tags=True
    list_display = ['session_key', '_session_data', 'expire_date']
    readonly_fields = ['_session_data']
    exclude = ['session_data']
    date_hierarchy='expire_date'
admin.site.register(Session, SessionAdmin)
于 2012-02-13T20:17:52.243 に答える
4

EB のそれ以外の優れた回答により、「データベースが QuerySet.dates() で無効な値を返しました。タイム ゾーン定義と pytz がインストールされていますか?」というエラーが表示されました。(私は db tz info と pytz をインストールしており、私のアプリはタイムゾーンを広範囲に使用しています。)「date_hierarchy」行を削除すると、問題が解決しました。そう:

import pprint
from django.contrib.sessions.models import Session
class SessionAdmin(admin.ModelAdmin):
    def _session_data(self, obj):
        return pprint.pformat(obj.get_decoded()).replace('\n', '<br>\n')
    _session_data.allow_tags=True
    list_display = ['session_key', '_session_data', 'expire_date']
    readonly_fields = ['_session_data']
    exclude = ['session_data']
admin.site.register(Session, SessionAdmin)
于 2014-04-24T18:13:35.040 に答える