2017-09-17 118 views
0

昨天我有一個Stackoverflow question about putting a permissioning check on a class-based-view。該解決方案似乎是納入PermissionDeniedMixin。它也看起來像我可以嘗試UserPassesTestMixin from Django-braces裝飾類或dispatch()方法?

這是有道理的,但我做一些背景閱讀的dispatch()方法和偶然發現this part of the documentation

要裝飾一個基於類的視圖的每個實例,你需要裝飾 類定義本身。要執行此操作,請將裝飾器應用於類的 dispatch()方法。

爲什麼我需要或選擇使用權限mixins而不是類本身來裝飾實例?

回答

0

編寫mixin而不是裝飾器的主要原因是mixin是類,因此是可擴展的。例如,如果我想稍微修改LoginRequiredMixin.handle_no_permission的行爲,那麼編寫一個擴展LoginRequiredMixin的新類很容易,可以覆蓋handle_no_permission,並改爲使用該修改的類。作爲一個函數,裝飾器不像自定義那樣簡單。