Home > Software engineering >  Django Login Required Redirect
Django Login Required Redirect

Time:01-27

Im trying to redirect a user when he isn't logged in the my LoginPage. I Have Tried Many Different solutions - Like @login_required & request.user.is_authenticated - yet nothing worked... im leaving my views.py & urls.py so someone can see if they can spot the problem Thanks For Any Help!

Views.Py:

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render,redirect
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

# Create your views here.

@login_required(login_url='/Login')
def Dashboard(request):
    if request.user.is_authenticated:
       return render(request, 'home/index.html')
    else:
       return LoginPage(request)


def LoginPage(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request,username=username, password=password)
        if user is not None:
            request.session.set_expiry(86400)
            login(request, user)
            return redirect('dashboard')

    return render(request,'accounts/login.html')

def registerPage(request):
    form = UserCreationForm()

    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            user = form.cleaned_data.get('username')
            messages.success(request, "Account Created for "   user   " Succesfully" )

            return redirect('login')


    context = {'form': form}
    return render(request, 'accounts/register.html', context)

def Admin(request):
    return HttpResponseRedirect(reverse('admin:index'))

def Logout(request):
    authenticate.logout(request)
    logout(request)
    return LoginPage(request)

Urls.Py:

from django.urls import path
from. import views
from django.contrib import admin
from django.urls import path, reverse_lazy
from django.views.generic.base import RedirectView
urlpatterns = [
    path('',views.LoginPage),
    path("Login", views.LoginPage, name="login"),
    path("Register", views.registerPage,name="register"),
    path("admin", views.Admin, name="admin"),
    path("dashboard", views.Dashboard, name="dashboard"),
    path('', RedirectView.as_view(url=reverse_lazy('admin:index'))),
    path('admin/', admin.site.urls),
    path("Login", views.logout, name="logout"),

CodePudding user response:

Hlooo

Instead of this

 @login_required(login_url='/Login')

Try this

@login_required(login_url='login')

use small 'l' since you used small 'l' in name = 'login'

This worked in my project , if user is not authenticated he will be

redirected to login page

CodePudding user response:

In your settings.py, try add

LOGIN_URL = '/Login/'

also after logout, send them to the login page

LOGOUT_URL = '/Login/'
  •  Tags:  
  • Related