Django Требуется перенаправление для входа в систему
Я пытаюсь перенаправить пользователя, когда он не вошел на мою страницу входа. Я пробовал много разных решений - например, @login_required & request.user.is_authenticated - но ничего не помогло... Я оставляю свои views.py & urls.py, чтобы кто-нибудь мог посмотреть, сможет ли он обнаружить проблему. Спасибо за любую помощь!
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
Вместо этого
@login_required(login_url='/Login')
Попробуйте это
@login_required(login_url='login')
используйте маленькую 'l', так как вы использовали маленькую 'l' в name = 'login'
Это работало в моем проекте, если пользователь не аутентифицирован, то он будет
перенаправление на страницу входа
В файле settings.py попробуйте добавить
LOGIN_URL = '/Login/'
также после выхода из системы отправьте их на страницу входа
LOGOUT_URL = '/Login/'