В django, когда я пытаюсь запустить сервер, я хочу сначала увидеть страницу входа в систему, но я вижу страницу индекса?
Прилагаю свой код в views и urls.py. Когда сервер запускается, я хочу сначала увидеть страницу входа, но я вижу ошибку, что эта страница не работает.
def loginPage(request): if request.user.is_authenticated: return redirect('/') else: if request.method == 'POST': имя пользователя = request.POST.get('username') пароль = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('/')
else:
messages.info(request, 'Username OR password is incorrect')
context = {}
return render(request, 'accounts/login.html', context)
urlpatterns = [
path('', views.loginPage, name="login"),
path('index/',views.index,name="index"),
Вы должны передать декоратор @login_required в вашем представлении. Если вы не хотите передавать этот декоратор в каждом представлении, есть второй способ, который вы можете сделать с помощью промежуточного ПО. В промежуточном ПО вы проверяете, аутентифицирован пользователь или нет. Если да, то он перенаправляет пользователя на индексную страницу, в противном случае - на страницу входа. Вот пример:
Создайте файл middleware.py и напишите в нем следующий код:
from django.utils.deprecation import MiddlewareMixin
from django.urls import reverse
from django.shortcuts import redirect
class LoginCheckMiddleWare(MiddlewareMixin):
def process_view(self, request, view_func, view_args, view_kwargs):
modulename = view_func.__module__
user = request.user # Who is the current user ?
if user.is_authenticated:
return redirect(reverse('index-page'))
else:
if request.path == reverse('login_page') or modulename == 'django.contrib.auth.views':
pass
else:
return redirect(reverse('login_page'))
После этого добавьте эту строку внутри MIDDLEWARE
в settings.py
файл:
'folder.middleware.LoginCheckMiddleWare',
вместо folder запишите ваш промежуточный файл, расположенный folder