以下是我目前检查模型是否属于正在编辑它的用户的方法。我在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很新。
谢谢。
答案 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
。您可能需要在get
或post
方法中执行一些额外检查,以便在返回None
时进行处理,以便您可以返回HttpResponseForbidden
您还可以将此用于使用get_object
方法的任何基于类的视图。