register - En Django, ¿cómo sé el usuario que está conectado actualmente?
register and login django (3)
En Django, ¿cómo sé el usuario que está conectado actualmente?
¿Dónde necesitas conocer al usuario?
En las views el usuario se proporciona en la solicitud como request.user
.
Para el manejo del usuario en plantillas, consulte here
Si desea guardar el creador o editor de la instancia de un modelo, puede hacer algo como:
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()
Encontré esto en Internet, pero ya no sé dónde
Ampliando la respuesta de @ vikingosegundo, si desea obtener el nombre de usuario dentro de Modelos, encontré una forma de declarar un MiddleWare. Crea un archivo llamado get_username.py
dentro de tu aplicación, con este contenido:
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
Edite su settings.py
y agréguelo a MIDDLEWARE_CLASSES
:
MIDDLEWARE_CLASSES = (
...
''yourapp.get_username.RequestMiddleware'',
)
Ahora, en su método save()
, puede obtener el nombre de usuario actual de esta manera:
from get_username import get_username
...
def save(self, *args, **kwargs):
req = get_username()
print "Your username is: %s" % (req.user)
El proyecto predeterminado Django 1.9.6 tiene user
en las plantillas predeterminadas
Entonces puedes escribir cosas como esta directamente:
{% if user.is_authenticated %}
{{ user.username }}
{% else %}
Not logged in.
{% endif %}
Esta funcionalidad es provista por el procesador de contexto django.contrib.auth.context_processors.auth
en settings.py
.
Pregunta de plantilla dedicada: ¿Cómo acceder al perfil de usuario en una plantilla de Django?