Django में, मुझे वर्तमान में लॉग-इन उपयोगकर्ता कैसे पता चलेगा?


81

Django में, मुझे वर्तमान में लॉग-इन उपयोगकर्ता कैसे पता चलेगा?


1
आपके पिछले प्रश्न का डुप्लीकेट? stackoverflow.com/questions/1476596/login-code-for-django
Abizern

8
@ अइबेम, नहीं, जो इस प्रश्न का दोहराव नहीं है।
Kirk Woll

जवाबों:


110

आपको उपयोगकर्ता को जानने की आवश्यकता कहां है?

में देखा गया उपयोगकर्ता के रूप में अनुरोध में प्रदान की जाती है 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()

मैंने इसे इंटरनेट पर पाया, लेकिन मुझे नहीं पता कि अब और कहाँ


4
बस एक नोट, save_formset में -> set_user, यह होना चाहिए अगर नहीं है hasattr (उदाहरण के लिए, 'create_by')
FurtiveFelon

क्या मुझे सेटिंग्स में वर्तमान उपयोगकर्ता मिल सकता है?
महेंद्र गर्ग

तुम ऐसा क्यों करोगे? (कृपया एक नया प्रश्न बनाएं, मेरे django दिन लंबे चले गए हैं)
vikingosegundo

@vikingosegundo मैं सोच रहा था कि आप अब Django का उपयोग क्यों नहीं करते हैं? क्या आप बैक-एंड डेवलपमेंट नहीं करते हैं या आप NodeJS में चले गए हैं?
अल्फा ब्रावो

1
किसी कारण से यह मेरे लिए आंतरिक कार्य का उपयोग करने set_userऔर फिर इसे मैप करने के लिए काम नहीं करता था instances। यह सिर्फ डेटाबेस में नए मॉडल नहीं बचा था। मुझे लूप के अंदर शरीर के for instance in instances: साथ उपयोग करना पड़ा set_userऔर पूरी तरह से काम किया। इसके अतिरिक्त, मुझे लगता है कि if formset.model == Articleहोना चाहिए if formset.model == Image। आपके उत्तर के लिए धन्यवाद @vikingosegundo। मैं इसे हल करने की कोशिश कर के दिनों के लिए कीबोर्ड पर अपना सिर मार रहा था !!
इकाफमैन

6

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


@nKn वास्तव में समर्पित मिडलवेयर है get_username()जो Modelsवस्तु में आह्वान करने के लिए आवश्यक है ? यदि हां, तो उस संबंध में विहित डॉक्स का लिंक होना अच्छा होगा। वहाँ 1.9.5 में अद्यतन देशी django कार्य कर रहे हैं?
alvas

5

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 टेम्पलेट में उपयोगकर्ता प्रोफ़ाइल का उपयोग कैसे करें?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.