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

Django已登录状态访问首页仍跳转登录页问题排查

问题根因
  • 首页视图写死了重定向逻辑,完全没有判断用户登录状态,不管用户是否已经登录,访问首页都会无条件跳转到登录页。
  • 登录校验通过后直接渲染首页模板的写法不规范,没有走首页路由的状态校验逻辑,也不符合POST请求处理后重定向的常规规范,容易出现表单重复提交问题。
  • 现有逻辑没有对已登录用户访问登录页的场景做处理,账号密码校验失败直接跳注册页的交互也不合理。
修复方案

修改首页视图

先读取session判断登录状态,仅未登录时才触发重定向:

def index(request):
    # 检查session中是否存在登录后写入的用户ID
    if not request.session.get('id'):
        return redirect('/login')
    # 已登录状态正常渲染首页
    return render(request, 'index.html')

修改登录视图

优化查询逻辑,登录成功后重定向到首页路由,补充异常场景处理:

from django.shortcuts import render, redirect
from register.models import reg

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 单次查询获取用户对象,避免重复查库
        user_details = reg.objects.filter(username=username, password=password).first()
        if user_details:
            request.session['id'] = user_details.id
            request.session['username'] = user_details.username
            # 登录成功重定向到首页路由
            return redirect('/')
        else:
            # 账号密码错误返回登录页,可增加错误提示
            return render(request,'login.html', {'msg': '用户名或密码错误'})
    else:
        # 已登录用户访问登录页直接跳首页
        if request.session.get('id'):
            return redirect('/')
        return render(request, 'login.html')

注意:当前代码明文存储、校验用户密码存在严重安全隐患,生产环境建议使用Django自带的身份认证模块处理用户登录逻辑,避免安全风险。

内容的提问来源于stack exchange,提问作者Swathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:48:48