78

如何在 Django 应用程序中获取有关登录用户的信息?

例如:

我需要知道登录用户的用户名才能说出谁发表了评论:

<form id='formulario' method='POST' action=''>
    <h2>Publica tu tuit, {{ usuario.username.title }} </h2>
    {% csrf_token %}
    {{formulario.as_p}}
    <p><input type='submit' value='Confirmar' /></p>
</form>

usuario.username.title我得到用户名,但在模板中,我需要从视图中获取该信息。

4

9 回答 9

110

您可以使用请求对象来查找已登录的用户

def my_view(request):
    username = None
    if request.user.is_authenticated():
        username = request.user.username

根据https://docs.djangoproject.com/en/2.0/releases/1.10/

在 Django 2.0 版本中,语法已更改为

request.user.is_authenticated
于 2013-06-03T22:00:31.923 回答
46

request.user.get_username()或者request.user.username,前者是首选。

Django 文档说:

由于可以换出 User 模型,因此您应该使用此方法而不是直接引用 username 属性。

PS 对于模板,请使用{{ user.get_username }}

于 2014-08-29T17:51:06.020 回答
12

' request.user ' 具有登录用户。
' request.user.username ' 将返回登录用户的用户名。

于 2014-08-27T09:38:16.293 回答
9

对于基于分类的视图使用self.request.user.id

于 2019-06-13T04:00:59.603 回答
3

如果您使用的是编写视图的旧方式,则以基于函数的视图的方式...

在您看来,您正在创建一个名为usuario保存请求的新变量。用户可能...

但是如果你返回Templatea context_instance,传递请求的 Context 的值,你将获得登录的用户,只需访问request.

// In your views file
from django.shortcuts import render_to_response
from django.template import RequestContext
def your_view(request):
    data = {
        'formulario': Formulario()
        # ...
    }
    return render_to_response('your_template.html',
        data, context_instance=RequestContext(request))


// In your template
<form id='formulario' method='POST' action=''>
    <h2>Publica tu tuit, {{ request.user.username.title }} </h2>
    {% csrf_token %}
    {{ formulario.as_p }}
    <p><input type='submit' value='Confirmar' /></p>
</form>
于 2013-06-03T23:15:15.970 回答
3

您可以使用它来获取登录用户的用户名:-

只需将其写在模板中即可。

{{ request.user.username }}
于 2021-04-11T09:38:50.300 回答
2

request.user.get_username()将返回用户电子邮件的字符串。

request.user.username将返回一个方法。

于 2018-03-06T09:42:03.383 回答
2

通过这种方式,您可以检查用户是否已登录如果是,例如如果未返回登录页面,则转到个人资料

def profile(request):
    try:
        if request.user.username in User:
            return render(request, "profile.html", {'username': request.user.username})
    except:
        return redirect("/accounts/login")
于 2021-04-19T23:26:05.870 回答
-1

对于模板,您可以使用

{% firstof request.user.get_full_name request.user.username %}

如果不为空,firstof 将返回第一个,否则返回第二个

于 2021-01-24T09:26:00.930 回答