You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:54:18