1

正如标题所说,request.user 和 request.user.username 有什么区别?我使用它们将它们与一些变量进行比较,有时它使用第一个,有时使用第二个

4

2 回答 2

5

request.userUser实例,request.user.username是该用户的字符串username

如果您有一个字符串,例如'admin',那么您可能希望将其与request.user.username.

于 2012-12-03T19:15:02.927 回答
4

我认为只有在您在模板中使用用户对象之后才会出现问题{{user}}{{user.username}}并且了解模板呈现相同的内容。

关键是,当您渲染模板时,django 会自动将变量转换为其 unicode 表示(字符串),并且在您的视图函数中,它可以不是字符串,而是某个模型的实例。

来自应用程序 django.contrib.auth 的用户类具有 unicode 表示,例如

def __unicode__(self):
    return self.username

也许这就是您感到困惑的原因,user并且user.username.

这种误解可能很危险,因为当您输入类似

if user1 == user2.username:

你不会得到TypeError,因为从 models.Model 继承的任何 django 模型都有一个运算符

def __eq__(self, other):
    return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()

查找 user1 和 user2.username 是否具有相同的类。

无论如何,我认为经过一些练习后,您会发现字符串和某些模型的对象之间的区别。


于 2012-12-03T20:44:46.650 回答