提取已登录的用户详细信息时出错

时间:2019-11-10 15:39:18

标签: django

我正在使用Django 2.2.6。

登录代码

class loginController(View):
    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        userobj = authenticate(username = username, password = password)
        if(userobj != None):
            login(request, userobj)
            return redirect('myprofileapp:profile')

用户通过身份验证后,导航至个人资料页面。当此行执行if(request.user.is_authenticated):时,出现错误。

class accountController(View):
    def get(self, request):
        if(request.user.is_authenticated):
            return HttpResponse(request.user)
  

“用户”对象不可迭代

编辑1

class accountController(View):
    def get(self, request):
        if(request.user.is_authenticated):
            print(request.user.username)
            return HttpResponse("ok")
        else:
            return HttpResponse("not ok")

不打印任何内容。好的,可以在上面的代码中打印出来。

3 个答案:

答案 0 :(得分:0)

您不应return HttpResponse(request.user),因为它不是可迭代的对象。它只是AuthenticationMiddleware的SimpleLazyObject。

答案 1 :(得分:0)

这是错误的:

return HttpResponse(request.user)

您可以将字符串传递给HttpResponse。您正在传递request.user,它是一个对象。由于用户名是字符串,因此您可以执行以下操作:

return HttpResponse( request.user.username)

基本上,您传递给HttpResponse的任何字符串都将显示在浏览器中。您通过“确定”,确定将被打印,您通过“ Pankaj”,Pankaj被打印。您传递request.user.username这是一个字符串,该用户名将在浏览器中显示为响应。

print中放置内容会打印到django控制台,而不会打印到Web浏览器。

答案 2 :(得分:-2)

代替if(request.user.is_authenticated):试试这个if request.user.is_authenticated():