में सत्र कुंजी हो रही मैं एक डेटाबेस में कुछ बातें संग्रहीत करना चाहते हैं, और एक विदेशी कुंजी के रूप में वर्तमान सत्र का उपयोग कर रहा: models.py से Django: एक सत्र की स्थापना और एक ही दृश्य
class Visited(models.Model):
session = models.ForeignKey(Session)
page = models.ForeignKey(Page)
times_visited = models.PositiveIntegerField()
ip_address = models.IPAddressField()
date_last_visited = models.DateTimeField()
def __unicode__(self):
return u'(%s, %s)' % (str(self.session.session_key), str(self.page.name))
बनाने के अगर यह पहली बार एक उपयोगकर्ता साइट पर आ चुका है
Session.objects.get(session_key=request.session.session_key)
हालांकि, और इस तरह की जरूरत नहीं है: इस मॉडल के लिए एक नई प्रविष्टि मैं निम्नलिखित का उपयोग कर रहा वर्तमान सत्र प्राप्त करने के लिए (views.py में) एक कुकी सेट अभी तक, ऊपर दिया गया कोड DoesNotExist
त्रुटि उत्पन्न करेगा।
मैं जानता हूँ कि भले ही अब सेट कुकी कि आप अभी भी सत्र वस्तुओं सेट कर सकते हैं। तो मैं कुछ हैक्स के बारे में सोच सकते हैं जैसे यह काम करते हैं, बनाने के लिए:
एक सत्र वस्तु (सत्र कुंजी के अलावा)- सेट अद्वितीय पहचानकर्ता एक सत्र ऑब्जेक्ट डेटाबेस, और एक सजावट समारोह का उपयोग यह जांचने के लिए करें कि यह सत्र का उपयोग करने से पहले मौजूद है या नहीं।
- बस सत्र ऑब्जेक्ट्स का उपयोग करें और डेटाबेस में कुछ भी स्टोर न करें (यह तकनीकी रूप से संभव होगा, लेकिन मेरे कार्यान्वयन के लिए यह पाइथन शब्दकोशों पर निर्भर करेगा-कुछ सौ प्रविष्टियों के साथ-कम से कम जैसे डेटाबेस के रूप में कुशल छँटाई।)
लेकिन मैं एक बेहतर समाधान मैं के साथ रह सकते हैं करना चाहते हैं। क्या इस समस्या का कोई आम तौर पर उपयोग या अच्छा समाधान है? या क्या मैं अपने मॉडल में सत्रों का सही संदर्भ भी दे रहा हूं?
आपकी मदद के लिए धन्यवाद।
यह आपके उत्कृष्ट स्पष्टीकरण के लिए धन्यवाद कि यह सब कैसे काम करता है (या बल्कि यह क्यों नहीं करता है ' टी काम)। अगर मैं लालित्य नहीं करता, तो सादगी के लिए मैंने दूसरे "हैक" की एक भिन्नता के साथ कहा। –
मैं Django या पायथन से बहुत परिचित नहीं हूं, लेकिन मुझे पूरा यकीन है कि यह जवाब बिल्कुल वही है जो मुझे चाहिए। क्लाइंट से सत्र आईडी पास होने पर मुझे सत्र को स्वैप करने की आवश्यकता है (पूछें नहीं)। हालांकि मैं थोड़ा उलझन में हूं, क्या मैं इस वर्ग को 'ddango.contrib.sessions.middleware.SessionMiddleware' और 'SESSION_ENGINE' के अलावा 'MIDDLEWARE_CLASSES' दोनों में संदर्भित करता हूं? निश्चित रूप से इसे 'SESSION_ENGINE' में संदर्भित करने से इस लाइन को पुन: प्राप्त करने का कारण बनता है? 'इंजन = import_module (सेटिंग्स.SESSION_ENGINE)'। क्या मैं इस बिंदु को याद कर रहा हूं? – Steve
मुझे नहीं लगता कि 'request.session.create() '' सेट-कुकी 'हेडर सेट करता है। – Flimm