正如标题所说,request.user 和 request.user.username 有什么区别?我使用它们将它们与一些变量进行比较,有时它使用第一个,有时使用第二个
问问题
3065 次
2 回答
5
request.user
是User
实例,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 回答