2011-02-12 14 views
13

में सत्र डेटा कैसे देखें I Django sessions का उपयोग कर रहा हूं और मैं व्यवस्थापक इंटरफ़ेस में सत्र डेटा देखने का एक तरीका चाहूंगा। क्या यह संभव है?Django, व्यवस्थापक इंटरफ़ेस

आईई। प्रत्येक सत्र के लिए मैं सत्र डेटाबेस में संग्रहीत डेटा देखना चाहता हूं (जो अनिवार्य रूप से एक शब्दकोश है जहां तक ​​मैं एकत्र कर सकता हूं)।

gAJ9cQEoVQ5zb3J0aW5nX2Nob2ljZXECVQJQT3EDVQxnYW1lc19wbGF5ZWRxBH1xBVgLAAAAcG9z 
dG1hbi1wYXRxBksDc1UKaXBfYWRkcmVzc3EHVQkxMjcuMC4wLjFxCFUKdGVzdGNvb2tpZXEJVQZ3 
b3JrZWRxClUKZ2FtZV92b3Rlc3ELfXEMdS4wOGJlMDY3YWI0ZmU0ODBmOGZlOTczZTUwYmYwYjE5 
OA== 


मैं admin.py में निम्नलिखित डाल दिया है इस लक्ष्य को हासिल करने के लिए:

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

वर्तमान में मैं सिर्फ एक हैश Session data क्षेत्र में इस तरह के रूप में देख सकते हैं,


I एन विशेष मैं प्रत्येक सत्र के लिए कम से कम एक आईपी पता देखने में सक्षम होने की उम्मीद कर रहा था। (अच्छा भी अगर मैं आईपी पते प्रति कितने सत्र गिनती और प्रत्येक के लिए कुल में सत्रों की संख्या के आधार पर आईपी आदेश सकता है नहीं होगा।)

आपकी मदद के लिए धन्यवाद :-)

उत्तर

24

आप कुछ इस तरह कर सकते हैं:

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_decodedlist_display में सीधे इस्तेमाल किया जा सकता हो सकता है। और यदि कुछ पकड़ है जो इसे ठीक से काम करने से रोकती है, तो आप लिंक किए गए Django स्रोत के आधार पर स्वयं सत्र डेटा को डीकोड कर सकते हैं।

+0

बहुत बढ़िया क्यों दिखाया जा रहा था, करता है कि मैं वास्तव में क्या करना चाहता था। धन्यवाद। –

+2

अगर आप "readonly_fields = ['_session_data']" (http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields) को सत्र एडमिन कक्षा में जोड़ते हैं , यदि आप एक व्यक्तिगत सत्र देखते हैं तो आप भी ताना देख सकते हैं। –

+0

@ जोनाथन: readonly_fields के बारे में जानना अच्छा है, साझा करने के लिए धन्यवाद –

4

सत्र डेटा निहित है एक बेस 64 एन्कोडेड मसालेदार शब्दकोश में। यही वह है जो आप व्यवस्थापक में देख रहे हैं क्योंकि वह डेटा सत्र मॉडल में टेक्स्टफ़िल्ल्ड में संग्रहीत होता है।

मुझे नहीं लगता कि कोई वितरित django कोड सत्र में आईपी पता संग्रहीत करता है लेकिन यदि आप इसे एक्सेस कर सकते हैं तो आप इसे स्वयं कर सकते हैं।

असली सत्र जानकारी प्रदर्शित करने के लिए, आप अपना स्वयं का फॉर्म फ़ील्ड लिख सकते हैं जो डीकोडेड जानकारी प्रस्तुत करता है। ध्यान रखें कि अगर आप इसे संशोधित करना चाहते हैं तो आपको सेव विधि को ओवरराइट करना होगा। आप django/contrib/sessions/models.py में एन्कोड और डीकोड विधियों पर एक नज़र डाल सकते हैं।

+0

कैसे सत्र डेटा कार्यों की स्पष्ट व्याख्या के लिए धन्यवाद और टुकड़ों में बांटा डेटा :) –

11

टोमाज़ के जवाब से जारी रखते हुए, मैं साथ चला गया:।

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) 
3

ईबी के अन्यथा महान जवाब मुझे त्रुटि "डाटाबेस के साथ छोड़ दिया QuerySet.dates() में कोई अमान्य मान दिया समय क्षेत्र परिभाषाएँ और 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) 
संबंधित मुद्दे