Python Django最佳实践-比较用户

Python Django最佳实践-比较用户,python,django,Python,Django,我正在做一个小项目,我有一个用户档案页面 此页面有一个名为user的变量。 此变量包含当前配置文件页面的用户对象。 登录的用户对象可通过请求访问。用户 如果您只打印用户对象,它将返回用户名,因为模型在\uuuu str\uuu函数中返回用户名 比较用户配置文件是否属于当前用户的最佳方法是什么 我可以写 if user == request.user 但是,如果django更改\uuuu str\uuu函数的返回值会怎么样 或者我可以写 if user.username == request.u

我正在做一个小项目,我有一个用户档案页面

此页面有一个名为user的变量。 此变量包含当前配置文件页面的用户对象。 登录的用户对象可通过请求访问。用户

如果您只打印用户对象,它将返回用户名,因为模型在
\uuuu str\uuu
函数中返回用户名

比较用户配置文件是否属于当前用户的最佳方法是什么

我可以写

if user == request.user
但是,如果django更改
\uuuu str\uuu
函数的返回值会怎么样

或者我可以写

if user.username == request.user.username


我认为
如果user.pk==request.user.pk将是最佳实践,因为每个用户都有不同的pk(主键),所以您的web应用程序不会出现任何混乱。

如果user==request.user:
是正确的方法。比较基于数据库主键,而不是字符串表示。Django docs:

罗曼·米罗什尼琴科已经回答了这个问题,只是一个小附录:

看起来这个问题是因为您假设
==
比较会在内部调用
\uuu str\uuu
函数。事实并非如此

\uuuu str\uuu
方法有时会隐式调用,但仅在定义良好的位置调用,例如:

  • 通过
    print(obj)
  • 通过
    '{0}.format(obj)
    f'{obj}'
    '%s'%obj
还有在其他地方隐式调用的
\uuuu repr\uuu
方法,例如在Python interactive shell中的每个值之后:

>>> a = SomeObject()
>>> a
<__main__.SomeObject object at 0x7f5f218889e8>
>a=SomeObject()
>>>a

但是,
=
操作符没有触及任何一个,而是调用
\uuuuueq\uuuu
方法。希望有帮助

为什么要将用户与用户进行比较。您只需将request.user用于profile@AnjaneyuluBatta.. 有些情况下,我们必须对它们进行比较。。。喜欢提供编辑配置文件的选项,等等!这取决于您的
用户实际上是什么。如果它是与
request.user
类型相同的模型实例,则对象之间简单的
=
是比较的正确方法。Django将负责正确的内部比较操作。如果它来自其他类型,您必须自己进行正确的比较,例如比较
username
属性。当然,这只在您编写可重用应用程序时才重要。在一个典型的Django项目中,您知道并且可以依赖于用户模型的特定形状。Django模型已经使用pk进行了比较,因此正确的测试是
User==request.User
>>> a = SomeObject()
>>> a
<__main__.SomeObject object at 0x7f5f218889e8>