request.user和request.user.username有什么区别?

时间:2012-12-03 19:07:58

标签: django

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

2 个答案:

答案 0 :(得分:3)

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

如果你有一个字符串,例如'admin',然后您希望将其与request.user.username进行比较。

答案 1 :(得分:2)

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

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

来自app django.contrib.auth的用户类具有类似

的unicode表示
def __unicode__(self):
    return self.username

也许这就是你混淆useruser.username的原因。

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

的内容时
if user1 == user2.username:

你不会得到TypeError,因为任何django模型都存在于models.Model有一个运算符

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

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

无论如何,我认为练习一点后你会发现某些模特的弦乐和物体之间存在差异。