Django में, मुझे वर्तमान में लॉग-इन उपयोगकर्ता कैसे पता चलेगा?
जवाबों:
आपको उपयोगकर्ता को जानने की आवश्यकता कहां है?
में देखा गया उपयोगकर्ता के रूप में अनुरोध में प्रदान की जाती है request.user।
टेम्प्लेट में उपयोगकर्ता-हैंडलिंग के लिए यहां देखें
यदि आप किसी मॉडल के निर्माता या संपादक को बचाना चाहते हैं तो आप कुछ ऐसा कर सकते हैं:
model.py
class Article(models.Model):
created_by = models.ForeignKey(User, related_name='created_by')
created_on = models.DateTimeField(auto_now_add = True)
edited_by = models.ForeignKey(User, related_name='edited_by')
edited_on = models.DateTimeField(auto_now = True)
published = models.BooleanField(default=None)
व्यवस्थापक
class ArticleAdmin(admin.ModelAdmin):
fields= ('title','slug','text','category','published')
inlines = [ImagesInline]
def save_model(self, request, obj, form, change):
instance = form.save(commit=False)
if not hasattr(instance,'created_by'):
instance.created_by = request.user
instance.edited_by = request.user
instance.save()
form.save_m2m()
return instance
def save_formset(self, request, form, formset, change):
def set_user(instance):
if not instance.created_by:
instance.created_by = request.user
instance.edited_by = request.user
instance.save()
if formset.model == Article:
instances = formset.save(commit=False)
map(set_user, instances)
formset.save_m2m()
return instances
else:
return formset.save()
मैंने इसे इंटरनेट पर पाया, लेकिन मुझे नहीं पता कि अब और कहाँ
set_userऔर फिर इसे मैप करने के लिए काम नहीं करता था instances। यह सिर्फ डेटाबेस में नए मॉडल नहीं बचा था। मुझे लूप के अंदर शरीर के for instance in instances: साथ उपयोग करना पड़ा set_userऔर पूरी तरह से काम किया। इसके अतिरिक्त, मुझे लगता है कि if formset.model == Articleहोना चाहिए if formset.model == Image। आपके उत्तर के लिए धन्यवाद @vikingosegundo। मैं इसे हल करने की कोशिश कर के दिनों के लिए कीबोर्ड पर अपना सिर मार रहा था !!
@ Vikingosegundo के उत्तर का विस्तार करते हुए, यदि आप मॉडल के अंदर उपयोगकर्ता नाम प्राप्त करना चाहते हैं, तो मुझे एक तरीका मिला जिसमें मिडिलवेयर घोषित करना शामिल है। get_username.pyइस सामग्री के साथ, अपने एप्लिकेशन के अंदर एक फ़ाइल बनाएं :
from threading import current_thread
_requests = {}
def get_username():
t = current_thread()
if t not in _requests:
return None
return _requests[t]
class RequestMiddleware(object):
def process_request(self, request):
_requests[current_thread()] = request
अपना संपादित करें settings.pyऔर इसे इसमें जोड़ें MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
...
'yourapp.get_username.RequestMiddleware',
)
अब, आपकी save()विधि में, आप वर्तमान उपयोगकर्ता नाम इस तरह प्राप्त कर सकते हैं:
from get_username import get_username
...
def save(self, *args, **kwargs):
req = get_username()
print "Your username is: %s" % (req.user)
get_username()जो Modelsवस्तु में आह्वान करने के लिए आवश्यक है ? यदि हां, तो उस संबंध में विहित डॉक्स का लिंक होना अच्छा होगा। वहाँ 1.9.5 में अद्यतन देशी django कार्य कर रहे हैं?
Django 1.9.6 डिफ़ॉल्ट प्रोजेक्ट userमें डिफ़ॉल्ट टेम्पलेट है
तो आप इस तरह की बातें सीधे लिख सकते हैं:
{% if user.is_authenticated %}
{{ user.username }}
{% else %}
Not logged in.
{% endif %}
यह कार्यक्षमता django.contrib.auth.context_processors.authसंदर्भ प्रोसेसर द्वारा प्रदान की जाती है settings.py।
समर्पित टेम्प्लेट प्रश्न: Django टेम्पलेट में उपयोगकर्ता प्रोफ़ाइल का उपयोग कैसे करें?