在视图中获取当前用户

8 投票
1 回答
16941 浏览
提问于 2025-04-18 05:16

我正在使用Django的认证系统来登录用户:

def signin(request):
        if request.method == "POST":
                username = request.POST.get("username").lower()
                password = request.POST.get("password").lower()
                user = authenticate(username = username, password=password)

但是,我似乎无法在其他视图中访问当前用户。在每个模板中,我都能访问到用户,但在视图本身中却无法访问。例如,在另一个路由中,我想能够做到以下几点:

def profile(request):
        skills = hasSkill.objects.filter(user__username=user.username)
        return render(request, "/profile.html", {"skills" : skills})

但是我总是收到一个错误,提示用户是一个NoneType对象。有什么想法吗?

1 个回答

8

你需要通过你获得的 request 来访问 user。你可以使用 request.user。把你的视图改成这样:

def profile(request):
        skills = hasSkill.objects.filter(user__username=request.user)
        return render(request, "/profile.html", {"skills" : skills})

你可以在Django的文档中找到更多信息,链接在这里 这里这里

Django使用会话和中间件将认证系统连接到请求对象中。

这会在每个请求上提供一个 request.user 属性,表示当前用户。 如果当前用户没有登录,这个属性会被设置为一个匿名用户的实例;如果用户已经登录,它将是一个用户的实例。

撰写回答