如何在Django的views.py中获取已登录用户的用户名?

3

实际上,我对Django和Python都很陌生。在/templates/home.html中,添加了{{ user.username }},它会显示当前登录的用户名。

<p>Welcome {{ user.username }} !!!</p>

我想在 views.py 文件中获取当前已登录的用户名。如何获取用户名?

我尝试了不同的方法,但是没有得到结果。

  1. user = User.objects.get(username=request.user.username)
  2. username = request.GET['username']
  3. def sample_view(request): current_user = request.user print(current_user)

请告诉我,如何实现我的目标。

我的 views.py 看起来像这样。有问题吗?

    #!python
    #log/views.py
    from django.shortcuts import render
    from django.contrib.auth.decorators import login_required
    from django.template import Context
    from contextlib import contextmanager
    # Create your views here.
    # this login required decorator is to not allow to any
    # view without authenticating
    @login_required(login_url="login/")
    def home(request):
         return render(request,"home.html")
#dummy_user = {{ username }}
#user = User.objects.get(username=request.user.username)
#username = request.GET['username']
#print(usernam
#user = request.user
#print(user)

    def sample_view(request):
            current_user = {}
            #current_user['loggeduser'] = request.user
             #or
            current_user['loggeduser'] = request.user.username
            return render(request,"home.html",current_user)
           # print(current_user.id)
1个回答

10
只要您启用了身份验证中间件,就不需要执行任何操作。用户名出现在模板中表明您已启用它。每个视图都可以访问一个request.user,它是User模型的实例。因此,以下内容非常冗余。
user = User.objects.get(username=request.user.username)

因为您已经拥有request.user.username!如果您想查找用户的电子邮件,则可以使用request.user.email或直接使用

user = request.user 

使用新创建的变量(例如user.username)
参考:https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.HttpRequest.user 从AuthenticationMiddleware中:AUTH_USER_MODEL的实例,表示当前登录用户。如果用户当前未登录,则user将设置为AnonymousUser的实例。您可以通过is_authenticated来区分它们,如下所示:

我遇到了一个NameError:name 'User' is not defined的错误。 - Venkatesh Panabaka
这意味着您没有阅读我的答案。我说的是,您不需要执行 user = User.objects.get(username=request.user.username) - e4c5
你在开玩笑吧?request是视图方法签名的一部分。 - e4c5
抱歉,我真的不懂Python和Django。我添加了我的views.py代码,请检查该代码并告诉我views.py代码的问题。 - Venkatesh Panabaka
很明显,您的方法签名定义了请求 def sample_view(request):,因此您提到的错误绝对不可能发生。 - e4c5
^^ 这个注释太棒了! - Nirmal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接