我不是很舒服地使用基於類的視圖,但我知道他們的特權,所以我迫使自己開始更頻繁地使用它們。基於類的視圖:在哪裏檢查權限?
有這個視圖接收路徑參數:manage/:id
管理一個特定的實體。
class MyView(TemplateView):
template_name = '...'
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['entity'] = get_object_or_404(Entity, pk=self.args[0])
return context
Entity
包括授權用戶執行特殊操作的列表。這種觀點,MyView
是這些特殊行動之一。
我試着製作一個裝飾器的視圖,但它需要首先找到Entity
,所以我不知道如何解決這個問題。
現在,我有一個check_permission(request, entity)
函數,檢查當前用戶是否是這些授權的用戶之一。
我的問題是我應該在基於類的視圖中調用此函數,如MyView
哪些視圖會被視爲「特殊操作」?
我應該只從get_context_data()
打電話嗎?
我在哪裏檢索「實體」?我是否需要'dispatch'和'get_context_data'中的'get_object_or_404'? – dabadaba
'entity'是'Entity'的一個實例嗎?無法記住從頭開始,但是您將獲得獲取數據所需的數據(與在'get_context_data()')中執行相同的操作,無論是在* args'和'** kwargs'還是'self.args'和'self.kwargs' – yedpodtrzitko
當然,這是我的顧慮,我需要得到它兩次?是不是可能只是'get_object_or_404(Entity,pk = self.args [0])'一次? – dabadaba