In Django, come faccio a sapere l’utente attualmente loggato?

In Django, come faccio a sapere l’utente attualmente loggato?

Dove hai bisogno di conoscere l’utente?

Nelle viste l’utente viene fornito nella richiesta come request.user .

Per la gestione degli utenti nei modelli, vedere qui

Se vuoi salvare il creatore o l’editor dell’istanza di un modello puoi fare qualcosa del tipo:

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) 

admin.py

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

L’ho trovato su Internet, ma non so più dove

Estendendo la risposta di @ vikingosegundo, se si desidera ottenere il nome utente all’interno di Modelli, ho trovato un modo che implica la dichiarazione di un MiddleWare. Crea un file chiamato get_username.py nella tua app, con questo contenuto:

 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 

Modifica il tuo settings.py e aggiungilo al MIDDLEWARE_CLASSES :

 MIDDLEWARE_CLASSES = ( ... 'yourapp.get_username.RequestMiddleware', ) 

Ora, nel tuo metodo save() , puoi ottenere il nome utente corrente in questo modo:

 from get_username import get_username ... def save(self, *args, **kwargs): req = get_username() print "Your username is: %s" % (req.user) 

Django 1.9.6 progetto predefinito ha user nei modelli predefiniti

Quindi puoi scrivere cose come questa direttamente:

 {% if user.is_authenticated %} {{ user.username }} {% else %} Not logged in. {% endif %} 

Questa funzionalità è fornita dal processore di contesto django.contrib.auth.context_processors.auth in settings.py .

Domanda modello dedicata: come accedere al profilo utente in un modello Django?