0

I have a new django project I am working on. I am integrating Djangos user login and logout service that comes with the framework. I have a view and within the view, I want to check and see if there is a user object in the request.user. if there is not, I want to redirect to login page. If there is a user in the request.user, I want to display the users home page. how can I do this. Here is my code:

def home(request):
    if not request.user:
        return redirect('login')
    else:
        User = request.user
        profile = Profile.objects.get(user = User)
        parameters = {
            'user':User,
            'profile':profile,
        }
        return render(request, 'user/home.html', parameters)

It works if there is a user logged in but doesnt work if there is no user logged in...

Omar Jandali
  • 814
  • 3
  • 20
  • 52

3 Answers3

5
def home(request):
    if not request.user.is_authenticated:
        return redirect('login')
    else:
        User = request.user
        profile = Profile.objects.get(user = User)
        parameters = {
            'user':User,
            'profile':profile,
        }
        return render(request, 'user/home.html', parameters)

you need to check whether the user is authenticated or not, if you check request.user django will return anonymous user as default

Exprator
  • 26,992
  • 6
  • 47
  • 59
  • 1
    Note that [`is_authenticated`](https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated) was made into an attribute rather than a method in Django 1.10. – Kevin Christopher Henry Dec 08 '17 at 06:49
  • 1
    You don't need `else` since it will return if user isn't logged in anyway – Bojan Kogoj Dec 08 '17 at 07:20
2

Django provides a decorator for this:

from django.contrib.auth.decorators import login_required

@login_required
def home(request):
    # at this point you know you _always_ have an authenticated user
    user = request.user
    profile = Profile.objects.get(user=user)
    context = {
        'user':user,
        'profile':profile,
    }
    return render(request, 'user/home.html', context)
bruno desthuilliers
  • 75,974
  • 6
  • 88
  • 118
-1

you have two options,

option 1:

to check if user is logged-in (authenticated user) inside your views, use "is_authenticated", as the following example:

from django.shortcuts import render, redirect

def home(request):
    if not request.user.is_authenticated:
        print('no, the user is not logged-in')
        return redirect('login')
      
    return render(request, 'user/home.html', parameters)

option 2:

by using'login_required' decorator :

from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required(login_url='/login')  #url you want to redirected to 
def home(request):
    return render(request, 'user/home.html', parameters)

this is just example , and change it based on your requirements.

i hope this helpful for you .

K.A
  • 1,399
  • 12
  • 24