How can I get the username of the logged-in user in Django?

Each Answer to this Q is separated by one/two green lines.

How can I get information about the logged-in user in a Django application?

For example:

I need to know the username of the logged-in user to say who posted a Review:

<form id='formulario' method='POST' action=''>
    <h2>Publica tu tuit, {{ usuario.username.title }} </h2>
    {% csrf_token %}
    {{formulario.as_p}}
    <p><input type="submit" value="Confirmar" /></p>
</form>

In usuario.username.title I get the username, but in the template, I need to get that information from the view.

You can use the request object to find the logged in user

def my_view(request):
    username = None
    if request.user.is_authenticated():
        username = request.user.username

According to https://docs.djangoproject.com/en/2.0/releases/1.10/

In version Django 2.0 the syntax has changed to

request.user.is_authenticated

request.user.get_username() or request.user.username, former is preferred.

Django docs say:

Since the User model can be swapped
out, you should use this method instead of referencing the username
attribute directly.

P.S. For templates, use {{ user.get_username }}

request.user‘ has the logged in user.
request.user.username‘ will return username of logged in user.

For classed based views use self.request.user.id

if you are using the old way of writting views, in the way of Function-Based-Views…

in your view, you are creating a new variable called usuario to save the request.user probably…

but if you returning to the Template a context_instance, passing the value of the Context of the request, you will get the logged user, just by accessing the request.

// In your views file
from django.shortcuts import render_to_response
from django.template import RequestContext
def your_view(request):
    data = {
        'formulario': Formulario()
        # ...
    }
    return render_to_response('your_template.html',
        data, context_instance=RequestContext(request))


// In your template
<form id='formulario' method='POST' action=''>
    <h2>Publica tu tuit, {{ request.user.username.title }} </h2>
    {% csrf_token %}
    {{ formulario.as_p }}
    <p><input type="submit" value="Confirmar" /></p>
</form>

You can use this to get the logged-in user’s username :-

Just write this in template.

{{ request.user.username }}

request.user.get_username() will return a string of the users email.

request.user.username will return a method.

in this way you can check is user is logged in or not If yes for example go to profile if not back to login page

def profile(request):
    try:
        if request.user.username in User:
            return render(request, "profile.html", {'username': request.user.username})
    except:
        return redirect("/accounts/login")

For template, you can use

{% firstof request.user.get_full_name request.user.username %}

firstof will return the first one if not null else the second one


The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .