Как перенаправить меня обратно на страницу входа в систему после 10 секунд бездействия с помощью django?

В моем settings.py я указал это и sessionId действительно истек, но он перенаправляет меня на некоторые случайные ссылки, которые я никогда не указывал вообще, вместо этого возвращается на страницу входа и показывает какую-то ошибку, я хочу, чтобы он перенаправлял обратно на страницу входа после 10 секунд бездействия, как мне это сделать?

Мой settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django_session_timeout.middleware.SessionTimeoutMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',


]

    SESSION_EXPIRE_SECONDS = 10  
    
    SESSION_EXPIRE_AFTER_LAST_ACTIVITY = True
    
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True

Мой views.py

 def login_view(request):
        form = LoginForm(request.POST or None)
        msg = None
        if request.method == 'POST':
            if form.is_valid():
                username = form.cleaned_data.get('username')  # retrieve the username
                password = form.cleaned_data.get('password')  # retrieve the password
                user = authenticate(username=username, password=password)  # authenticate user
    
                if user is not None and user.is_admin:  # authenticated if user is an admin
                    login(request, user)
    
    
                    return redirect('adminpage')  # redirect the user to the admin page
    
                elif user is not None and user.is_customer:  # authenticated if user is a customer service
                    login(request, user)
                    return redirect('customer')  # redirect the user to the customer service page
    
                elif user is not None and user.is_logistic:  # # authenticated if user is a logistic
                    login(request, user)
                    return redirect('logistic')  # redirect the user to the logistic page
                else:
                    msg = 'invalid credentials'
    
            else:
                msg = 'error validating form'
        return render(request, 'login.html', {'form': form, 'msg': msg})
def admin(request):

    return render(request, 'admin.html')

Мой urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('login/', views.login_view, name='login_view'),
    path('register/', views.register, name='register'),
    path('adminpage/', views.admin, name='adminpage'),
    path('customer/', views.customer, name='customer'),
    path('logistic/', views.logistic, name='logistic'),
    path('forget/', views.forget, name='forget'),
    path('newblock/', views.newblock, name='newblock'),
    path('quote/', views.quote, name='quote'),
    path('profile/', views.profile, name='profile'),
    path('adminprofile/', views.adminprofile, name='adminprofile'),
]

Вот сообщение об ошибке, которое он показывает мне после истечения сессии:

enter image description here

Проблема заключается в вашем логин-урле :

Django пытается перенаправить на http://localhost:8000/accounts/login/, но этот url не определен ни в одном urls.py файле.

Добавьте LOGOUT_REDIRECT_URL = reverse_lazy('login_view') в файл settings.py. (не забудьте from django.urls import reverse_lazy).

'django_session_timeout.middleware.SessionTimeoutMiddleware' вызывает django.contrib.auth.views.redirect_to_login, если в настройках не указано SESSION_TIMEOUT_REDIRECT значение. Детали

redirect_to_login внутренне использует settings.LOGIN_URL значение https://docs.djangoproject.com/en/3.2/ref/settings/#login-url

Похоже, что у вас есть два варианта: установить SESSION_TIMEOUT_REDIRECT или изменить значение LOGIN_URL в настройках. Я бы рекомендовал изменить второе.

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