Django custome login redirection middleware redirection problem says ERR_TOO_MANY_REDIRECTS
привет друзья мне нужна помощь я хочу перенаправить пользователя когда он пытается зайти на страницу в моем django
settings.py is
MIDDLEWARE = ['cart.middleware.LoginRedirectMiddleware']
url.py это (home - имя приложения)
path('',views.login,name="login"),
path('home',views.home,name="home"),
middleware.py находится (расположен в mainapp)
def process_view(self, request, view_func, view_args, view_kwargs):
"""
Called just before Django calls the view.
"""
print("executed")
if (request.user.is_authenticated):
return redirect('home')
else:
return redirect('login')
- Полагаю, у вас есть параметры в views.login / views.home?
Если да, то вам следует добавить args или kwargs в обратную сторону редиректа?
redirect('home', *args, **kwargs) - Используйте
return redirect('/some/url/')вместоreturn redirect('home').
Ref:https://docs.djangoproject.com/en/4.0/topics/http/shortcuts/#redirect
Надеюсь, это может помочь
Причина вашей ошибки в том, что ваше промежуточное ПО перенаправляет пользователя только при любом исходе if-заявления - поэтому ваш код постоянно перенаправляет пользователя, даже если он попадает на главную страницу - отсюда и ошибка ERR_TOO_MANY_REDIRECTS.
Вам нужно указать, что вы хотите перенаправлять на 'home', если пользователь аутентифицирован и пытается получить доступ к странице входа.
if (request.user.is_authenticated and request.path == '/login/'):
return redirect('home')
else:
return redirect('login')
Ваш фактический request.path может выглядеть иначе, что-то вроде /accounts/login/ также часто встречается.