在Django中,为什么user.is_authenticated是一个方法而不是像is_staff那样的成员变量
我在应用程序中遇到了一个关于用户认证的错误,浪费了一些时间。我觉得这个问题有点复杂,但也许有人能解释一下原因,这样我就能理解了。
user.is_staff
是一个成员变量,而user.is_authenticated
是一个方法。不过,is_authenticated
这个方法只会根据用户是User
还是AnonymousUser
返回真或假(具体可以查看这里)。
这样设计有什么原因吗?为什么user.is_authenticated
要用方法来表示呢?
提前谢谢你们!
3 个回答
0
is_authenticated()
是一个函数,用来检查当前用户对象是否已经被填充数据。
其实没必要在数据库里专门存储这个对象是否被填充的信息,因为只有在对象正确填充的情况下,相关的数据才会被存入数据库。
所以,is_authenticated()
是一个方法,而不是一个字段。接下来说说 user.is_staff
这个字段,它用来表示某个用户是否属于员工,比如超级用户。为了区分不同的用户,我们需要把这些信息存储在数据库里。
0
is_authenticated() 这个函数只是用来检查用户输入的用户名和密码是否有效。它不会让用户以游客身份登录(如果我没记错的话)。
8
因为 is_staff
是数据库里的一个字段,而 is_authenticated
不是(要是它也是字段就奇怪了)。也许 is_authenticated
可以变成一个属性,但 Django 的开发者们可能觉得把它做成一个函数会更清晰。