简体   繁体   中英

Django Login Required Redirect

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"),

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

In your settings.py, try add

LOGIN_URL = '/Login/'

also after logout, send them to the login page

LOGOUT_URL = '/Login/'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM