在视图中获取当前用户
我正在使用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 属性,表示当前用户。 如果当前用户没有登录,这个属性会被设置为一个匿名用户的实例;如果用户已经登录,它将是一个用户的实例。