2013-04-01 48 views
1

以下是我目前如何檢查模型屬於編輯它的用戶。我在views.py中爲幾乎所有事情做了這件事,這有點重複,我使用它很多!如何檢查一個實例是否屬於登錄用戶?

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

所以,我想知道別人如何解決這種功能?我一直在考慮將所有對象的保存方法都移到每個對象上?

可以給我的Django開發如何做到這一點的例子(有代碼),必須有一個更好的wayfor檢查什麼用戶可以編輯什麼,對不對?

我不會急於接受一個答案,我真的很感興趣,從有經驗的開發者權威的迴應,因爲我很新的Django的。

謝謝。

+0

你在哪裏做你的意見這些檢查?具體來說,你使用基於類的視圖嗎? – Ngenator

+0

是的,這是基於類的觀點。什麼和模型選項? – MarkO

回答

2

混入可以,如果你正在使用基於類視圖的工作......你可以做這樣的事情

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方法任何基於類的觀點。