如何检查实例属于登录用户?

时间:2013-04-01 13:00:10

标签: django

以下是我目前检查模型是否属于正在编辑它的用户的方法。我在views.py做了几乎所有的事情,这有点重复,我经常使用它!

 # If we have an instance check that it belongs to the login.
        if some_object.user != request.user:
            return HttpResponseForbidden()

所以,我想知道其他人如何解决这些功能?我一直在考虑将其移动到所有对象的save方法中?

我是否可以获得Django开发人员如何做到这一点的示例(包含代码),必须有更好的方法来检查用户可以编辑什么,对吧?

我不会急于接受答案,我真的对经验丰富的开发者的权威回应感兴趣,因为我对Django很新。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果你使用基于类的视图,Mixins可以工作......你可以通过做这样的事情来创建你自己的

class RequireOwnershipMixin(object):
    def get_object(self, queryset=None):
        obj = super(RequireOwnershipMixin, self).get_object(queryset)
        if obj.user != self.request.user:
            return None
        return obj

您的视图现在看起来像这样

class UpdateSomeObjectView(RequireOwnershipMixin, UpdateView):
    ...

如果您不是对象的所有者,这将覆盖get_object方法以返回None。您可能需要在getpost方法中执行一些额外检查,以便在返回None时进行处理,以便您可以返回HttpResponseForbidden

您还可以将此用于使用get_object方法的任何基于类的视图。