这是我的Django代码
print request.user.role
print request.user.role is "Super"
print request.user.role == "Super"
print "Super" is "Super"
并且控制台上的输出是
Super
False
False
False
True
我想知道它为什么不匹配确切的字符串
答案 0 :(得分:4)
这是因为request.user.role
不是字符串。因此,将其与字符串"Super"
进行比较将返回false,因为没有隐式类型比较。如果要将其与一个字符串进行比较,则必须将转换为字符串。要转换为字符串,您可以尝试:
str(request.user.role)
您的上一个print
返回true,因为您只是将字符串"Super"
与自身进行比较,显然。另外作为旁注,您只想在比较身份而不是值时使用is
。
答案 1 :(得分:3)
请不要使用字符串比较来检查用户角色。这种方法容易出错,可能会为新创建的字符串使用更多内存,并且总体上是危险的。例如,如果代表角色的值不是它的名称,则必须自己跟踪名称 - 值映射。或者,如果库会更改它的思路并将名称交换为整数等。
所有提供此类功能的库都有roles
枚举,其中包含角色的所有值。因此,例如,在django-user-roles中,您可以执行
user.role.is_super # maybe role.is_Super
# or
from userroles import roles
user.role == roles.super # maybe roles.Super
这是更可读和更安全的方法。