2013-06-26 3 views
12

मुझे request.user के बारे में भ्रम है जो Django में संदर्भित करता है ?? क्या यह उपयोगकर्ता नाम फ़ील्ड auth_user तालिका में संदर्भित करता है या क्या यह उपयोगकर्ता मॉडल उदाहरण का संदर्भ देता है?Django में request.user

मैं इस संदेह नहीं था क्योंकि मैं का उपयोग कर टेम्पलेट में ईमेल क्षेत्र तक पहुँचने के लिए {{request.user.username}} या {{user.username}}

बजाय मैं विचारों फ़ाइल में निम्न था सक्षम नहीं था

userr = User.objects.get(username=request.user) 

और टेम्पलेट के लिए 'userr' पारित कर दिया और के रूप में {{ userr.email }}

अपने काम कर रहे हालांकि ईमेल क्षेत्र पहुँचा, लेकिन मैं इसके बारे में कुछ स्पष्टता करना चाहते थे।

धन्यवाद :)

उत्तर

7

यदि आपका टेम्पलेट AnonymousUser प्राप्त कर रहा है, तो {{request.user.email}} का संदर्भ नहीं मिलेगा। पहले, आपको पूछना चाहिए कि {{request.user.is_authenticated }} है या नहीं।

आपको यह जांचना होगा कि इसमें संदर्भ प्रोसेसर TEMPLATE_CONTEXT_PROCESSORS सेटिंग्स के अनुभाग में शामिल है। यदि आप Django 1.4 या नवीनतम का उपयोग कर रहे हैं, तो संदर्भ प्रोसेसर django.contrib.auth.context_processors.auth है। यह संदर्भ प्रोसेसर प्रत्येक अनुरोध में उपयोगकर्ता ऑब्जेक्ट को शामिल करने के लिए ज़िम्मेदार है।

+1

क्या request.user डिफ़ॉल्ट रूप से टेम्पलेट पर पास किया गया है या स्पष्ट रूप से किया जाना है? और कुछ स्थानों पर मैंने {{user.is_authenticated}} का उपयोग देखा है। क्या यह भी काम करता है? – zephyr

+0

धन्यवाद @Emigue। यू का कहना है कि django.core.context_processors.auth 1.4 से कम संस्करणों के लिए है? और {{user.is_authenticated}} भी काम करता है? – zephyr

0

request.user वास्तविक उपयोगकर्ता मॉडल उदाहरण को दर्शाता है।

request.user.FIELDNAME आप उपयोगकर्ता मॉडल

+0

पर उपयोग कर रहे हैं लेकिन अनुरोध पारित किया जाना है। क्या यह ?? – zephyr

+0

अनुरोध इस तरह django टेम्पलेट को पास किया गया है। 'रेंडर (अनुरोध,' templatename ', {' a ':' b '....}) ' तीसरा पैरामीटर संदर्भ शब्दकोश –

8

request.user के सभी क्षेत्रों तक पहुंचने देगा उपयोगकर्ता मॉडल वस्तु है।

यदि आप request स्पष्ट रूप से पास नहीं करते हैं तो आप टेम्पलेट में अनुरोध ऑब्जेक्ट तक नहीं पहुंच सकते हैं। यदि आप टेम्पलेट से उपयोगकर्ता ऑब्जेक्ट तक पहुंच चाहते हैं, तो आपको इसे टेम्पलेट में पास करना होगा या RequestContext का उपयोग करना चाहिए।

+0

और वर्तमान उपयोगकर्ता कैसे प्राप्त करें? क्या विचारों में इसका उपयोग करने का मेरा तरीका है, सही तरीका? – zephyr

+1

'request.user' वर्तमान लॉग-इन उपयोगकर्ता है यदि उपयोगकर्ता लॉग इन है। अन्यथा यह अनामित उपयोगकर्ता है। – falsetru

+0

@ सुमितेटारीवाल, https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user – falsetru

1

यह आपके द्वारा निर्धारित किए गए सेट पर निर्भर करता है।

इसलिए, यह वास्तव में

user = User.objects.get(username=request.user.username) 

उपयोग करने के लिए बेहतर है, आप अगर आप settings.py

में TEMPLATE_CONTEXT_PROCESSORS सूची में 'django.core.context_processors.request' संलग्न तो फिर तुम चर {उपयोग कर सकते हैं इस तरह के चर निर्धारित करने की जरूरत नहीं है {request.user.username}} टेम्पलेट्स में यदि आप renderviews.py

+0

धन्यवाद @ सुहैल मुझे वहां सुधारने के लिए। मुझे लगता है कि मेरा कोड शायद काम कर रहा था क्योंकि डिफ़ॉल्ट रूप से उपयोगकर्ता मॉडल उपयोगकर्ता नाम फ़ील्ड प्रिंट करता है। जिस तरह से हम अपनी कस्टम कक्षा में __unicode__ फ़ंक्शन को परिभाषित करते हैं? ऐसा है क्या?? – zephyr

+0

हां यह 'def __unicode__' पर निर्भर करता है – suhailvs

संबंधित मुद्दे