vincent register page loginview custom and django login

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?