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

使用唯一slug获取用户资料异常:登录后仅返回首个数据库用户

问题分析与解决方案

看起来你遇到了两个关联的问题:登录后用户资料总是返回数据库首个用户,以及地址栏slug无法正确显示目标用户的信息。我来帮你一步步排查和解决:

1. 登录后返回首个用户而非当前登录用户

这个问题大概率是查询逻辑或参数传递出错导致的,常见原因和修复方式:

  • 视图查询逻辑错误:如果你的视图里用了User.objects.first()而不是通过slug参数过滤,那肯定会返回第一个用户。修正成通过slug精准查询:
    def profile_view(request, slug):
        try:
            # 重点:用传入的slug参数查询用户
            user = User.objects.get(slug=slug)
        except User.DoesNotExist:
            return HttpResponseNotFound("该用户不存在")
        # 后续渲染逻辑
        return render(request, 'profile.html', {'user': user})
    
  • URL路由未正确传递slug:检查你的路由配置,确保路由正确捕获slug参数并传递给视图:
    # 示例Django路由配置
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('profile/<slug:slug>/', views.profile_view, name='profile'),
    ]
    
  • 登录跳转逻辑错误:如果登录后自动跳转到个人资料页,要确保跳转时用的是当前登录用户的slug,而不是硬编码或取第一个用户:
    def login_view(request):
        # 登录验证逻辑...
        if user.is_authenticated:
            # 用request.user.slug生成正确的跳转URL
            return redirect('profile', slug=request.user.slug)
    

2. 未登录可查看用户资料 + 地址栏slug异常

地址栏始终显示firstuser,说明链接生成或跳转逻辑固定了slug值,修复点:

  • 模板链接动态生成:在模板里生成用户资料链接时,一定要传入目标用户的slug,而不是固定值:
    <!-- 示例模板代码 -->
    {% for user in users %}
        <a href="{% url 'profile' slug=user.slug %}">{{ user.username }} 的资料</a>
    {% endfor %}
    
    导航栏的"我的资料"链接也要区分登录状态:
    {% if user.is_authenticated %}
        <a href="{% url 'profile' slug=user.slug %}">我的资料</a>
    {% endif %}
    
  • 检查全局逻辑干扰:排查是否有中间件、上下文处理器或者装饰器,错误地把请求中的slug参数替换成了firstuser,这会导致即使手动修改地址栏,后续跳转又被改回去。

额外调试建议

  • 在视图函数里打印slug参数和查询到的用户,确认参数是否正确传递:
    def profile_view(request, slug):
        print(f"当前接收的slug: {slug}")
        user = User.objects.get(slug=slug)
        print(f"查询到的用户: {user.username}")
        # ...
    
  • 确保用户模型的slug字段是唯一的,避免多个用户slug重复导致查询混乱:
    from django.db import models
    
    class User(models.Model):
        slug = models.SlugField(unique=True)
        # 其他字段...
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:26:46