Django自定义登录重定向中间件出现ERR_TOO_MANY_REDIRECTS问题求助
解决Django重定向循环(ERR_TOO_MANY_REDIRECTS)问题
你的问题出在中间件对所有请求都执行重定向逻辑,包括login和home视图本身,导致无限循环:
- 未认证用户访问
login页面时,中间件判断未认证,再次重定向到login,陷入循环 - 已认证用户访问
home页面时,中间件判断已认证,再次重定向到home,同样循环
修复方案:修改中间件,排除目标视图
修改middleware.py的process_view方法,让中间件不对login和home视图执行重定向逻辑:
def process_view(self, request, view_func, view_args, view_kwargs): """ Called just before Django calls the view. """ print("executed") # 排除login和home视图,避免循环重定向 view_name = view_func.__name__ if view_name in ['login', 'home']: return None # 让视图正常执行,不干涉 if request.user.is_authenticated: return redirect('home') else: return redirect('login')
另一种方式:通过请求路径判断
如果你更倾向于用路径而非视图名判断,也可以这样写:
def process_view(self, request, view_func, view_args, view_kwargs): """ Called just before Django calls the view. """ print("executed") # 排除根路径(login)和/home路径 if request.path in ['/', '/home']: return None if request.user.is_authenticated: return redirect('home') else: return redirect('login')
原理是:当用户访问login或home页面时,中间件直接放行,让视图正常处理;只有访问其他页面时,才触发重定向判断。
内容的提问来源于stack exchange,提问作者hithin chandran
相关产品推荐
相关产品推荐

