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?