Django,如何在管理界面中查看会话数据

Jon*_*Cox 15 python django django-sessions

我正在使用Django会话,我想在管理界面中查看会话数据.这可能吗?

即对于每个会话,我想看到存储在会话数据库中的数据(就我所能收集而言,这本质上是一个字典).

目前我只能看到该Session data字段中的哈希,例如:

gAJ9cQEoVQ5zb3J0aW5nX2Nob2ljZXECVQJQT3EDVQxnYW1lc19wbGF5ZWRxBH1xBVgLAAAAcG9z
dG1hbi1wYXRxBksDc1UKaXBfYWRkcmVzc3EHVQkxMjcuMC4wLjFxCFUKdGVzdGNvb2tpZXEJVQZ3
b3JrZWRxClUKZ2FtZV92b3Rlc3ELfXEMdS4wOGJlMDY3YWI0ZmU0ODBmOGZlOTczZTUwYmYwYjE5
OA==
Run Code Online (Sandbox Code Playgroud)


我已将以下内容放入admin.py中以实现此目的:

from django.contrib.sessions.models import Session
...
admin.site.register(Session)
Run Code Online (Sandbox Code Playgroud)


特别是我希望能够至少看到每个会话的IP地址.(如果我可以计算每个IP地址的会话数,并根据每个IP地址的总数来订购IP,那也会很好.)

谢谢您的帮助 :-)

Tom*_*ski 29

你可以这样做:

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)
Run Code Online (Sandbox Code Playgroud)

甚至get_decoded也可以直接在list_display中使用.如果有一些捕获阻止它正常工作,您可以根据链接的Django源自行解码会话数据.

  • 此外,如果您将"readonly_fields = ['_session_data']"(http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields)添加到SessionAdmin类,如果您查看单个会话,也可以看到该词典. (2认同)

EB.*_*EB. 11

继续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)
Run Code Online (Sandbox Code Playgroud)