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

Django登录认证成功后无法重定向至首页问题求助

问题分析与解决方案

核心问题:视图函数名与Django内置函数冲突

你的自定义login视图函数和Django自带auth模块中的login认证函数重名了。当你在代码里调用login(request, uauth)时,实际执行的是你自己写的这个登录视图,而非用于设置用户登录状态的内置认证函数。这会导致用户登录状态未被正确标记,home视图检测到用户未认证后又重定向回登录页,形成循环。

具体修复步骤

1. 修改自定义登录视图的函数名

将自定义的登录视图函数名改为user_login(或其他不与内置函数冲突的名称):

def home(request):
    print(request.user)
    if request.user.is_authenticated:
        return render(request, "home/home.html")
    else:
        # 建议使用URL名称重定向,路径变更时无需修改此处代码
        return redirect("login")

# 修改函数名,避免与内置login冲突
def user_login(request):
    error = ''
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        try:
            user = AppUser.objects.get(email=username)
        except AppUser.DoesNotExist:
            error = 'Usuario no encontrado'
            return render(request, 'login.html', {'error': error, 'form': Login()})
        if hasattr(user, 'appuserauth'):
            if user.appuserauth.check_password(password):
                uauth = authenticate(request, username=user.email, password=password)
                if uauth is not None:
                    # 明确导入并调用Django内置的login认证函数
                    from django.contrib.auth import login
                    login(request, uauth)
                    return redirect("home")
            else:
                error = 'Contraseña incorrecta'
                return render(request, 'login.html', {'error': error, 'form': Login()})
        else:
            error = 'El usuario no tiene una contraseña'
            return render(request, 'login.html', {'error': error, 'form': Login()})
    else:
        return render(request, "login.html", {
            "form": Login(),
            "error": error
        })

2. 同步更新URL配置

修改URL映射,指向新的视图函数,保持URL名称不变(前端表单无需修改):

from django.urls import path
from . import views

urlpatterns = [
    path('home/', views.home, name='home'),
    path('inventario/', views.inventario, name='inventario'),
    path('compras/', views.compras, name='compras'),
    path('ventas/', views.ventas, name='ventas'),
    # 关联到新的视图函数user_login
    path('login/', views.user_login, name='login'),
]

3. 优化重定向写法

将home视图中的redirect("login/")改为redirect("login"),使用URL名称而非硬编码路径,提升代码可维护性。

额外检查项

  • 确保已在视图文件顶部正确导入from django.contrib.auth import authenticate
  • 确认AppUser与AppUserAuth的关联逻辑正确,保证authenticate能正常返回合法的用户对象

内容的提问来源于stack exchange,提问作者Antony Arévalo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:33:18