0

楷模:

INTERNAL_STATES = (
    ('1', _('Live')),
    ('2', _('Coming soon')),
    ('3', _('Draft')),
)

看法:

if request.user.is_staff is False and building.internal_state is not 1:
    raise Http404
else:
    pass

有人能告诉我为什么这个代码让我登陆 404,即使我试图查看的建筑物在我没有登录时有 internal_state = 1 吗?很抱歉发布这么简单的问题,但我看不出有什么问题。

4

2 回答 2

3

internal_state 的类型是字符串,而不是整数。

试试这个:

if not request.user.is_staff and building.internal_state != '1':
    raise Http404
else:
    pass
于 2012-12-03T18:10:58.413 回答
0

即使是整数,与“is”运算符进行比较也可能很危险。在 CPython 实现中,您可以检查是否键入:

a = 1
b = 1
a is b
#True

但如果你输入这样的内容:

a = -6
b = -6
a is b
#False

事实上,'is' 运算符比较的不是值,而是内存中的地址。

那是我的 50 美分。

于 2012-12-03T20:53:32.633 回答