Django中的request.user是指什么?

32

我对Django中的request.user指的是什么有疑惑?它是指auth_user表中的username字段还是指User模型实例?

我有这个疑问,是因为我无法通过{{request.user.username}}{{user.username}}在模板中访问电子邮件字段。

因此,我在视图文件中进行了以下操作:

userr = User.objects.get(username=request.user)

userr传递到模板并通过{{ userr.email }}访问电子邮件字段,虽然它有效,但我希望对此有更多的明确性。

4个回答

18

request.user 是用户模型对象。

如果您不显式传递request,则无法在模板中访问请求对象。 如果您想要从模板访问用户对象,则应将其传递给模板或使用RequestContext。


如何获取当前用户?我在视图中访问它的方式正确吗? - zephyr
3
如果用户已登录,则 request.user 是当前登录的用户。否则,它是匿名用户。 - falsetru
@SumeetDhariwal,请确保用户已通过user.is_authenticated()登录。AnonymousUser没有电子邮件字段。 - falsetru
Request(请求)对象没有username(用户名)属性。如果通过request.username访问应该引发错误。你是否为request分配了username - falsetru
1
@PrateekGupta,我在这里发表了评论。=> AnonymousUser - falsetru
显示剩余6条评论

17

如果您的模板接收到匿名用户(AnonymousUser),那么对于{{request.user.email}}的引用将找不到。以前,您必须询问{{request.user.is_authenticated }}是否存在。

您必须检查是否在设置的TEMPLATE_CONTEXT_PROCESSORS部分中包含了django.core.context_processors.auth上下文处理器。如果您使用的是Django 1.4或更高版本,则上下文处理器是django.contrib.auth.context_processors.auth。这个上下文处理器负责在每个请求中包含用户对象。


1
请求中的request.user默认传递到模板中还是需要显式地完成?在某些地方,我看到了{{user.is_authenticated}}的使用。这也可以工作吗? - zephyr
谢谢@Emigue。你的意思是说django.core.context_processors.auth适用于1.4版本以下?而{{user.is_authenticated}}也可以使用吗? - zephyr

2
取决于您设置了什么。因此,最好使用。
user = User.objects.get(username=request.user.username)

实际上,如果您将'django.core.context_processors.request'添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS列表中,则无需定义此类变量。

然后,如果您在views.py中使用render,则可以在模板中访问变量{{ request.user.username }}。


感谢 @Suhail 在那里纠正我。我认为我的代码可能是工作的,因为用户模型默认打印用户名字段。就像我们在自定义类中定义 unicode 函数一样?是这样吗? - zephyr

1

request.user指的是实际的用户模型实例。

request.user.FIELDNAME将允许您访问用户模型的所有字段。


但是请求必须被传递。是吗? - zephyr
请求被传递到Django模板,如下所示。 render(request, 'templatename', {'a' : 'b'....}) 第三个参数“a”是上下文字典。 - Mohammed Shareef C

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