В 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

Вернуться на верх