1. 程式人生 > >【Python web 開發】django rest framwork動態設定許可權premission

【Python web 開發】django rest framwork動態設定許可權premission

首先我們來看下我們寫的使用者usersViewSet

 

新建使用者,獲取使用者資訊詳情,修改使用者詳情,是共用同一個viewset,但是新建使用者是不需要 使用者token的,獲取詳情和修還使用者資訊是需要使用者的token的

但是又是共用同一個配置,那怎麼辦呢? 於是就引進了 動態化配置premisetion

mixins.RetrieveModelMixin 是獲取使用者詳情的 view

獲取使用者資訊 前端是要在請求的url裡面帶一個user_id 過來的,這個有兩種方式
1、使用者登入成功在 返回一個
user_id給前端,前端再請求使用者資訊的時候帶著這個id 過來
2、不用前端傳遞id ,後臺重寫get_object 方法獲取當前請求的user

 

如何來動態配置premisstion?
我們來看原始碼
viewsets.GenericViewSet---generics.GenericAPIView---views.APIView  進來 testvir\Lib\site-packages\rest_framework\views.py

看原始碼:get_premisstion()方法 主要是 遍歷我們配置的premisstion class ,返回的premisstion class 的一個例項也是物件,可能會有多個,所以返回的是一個數組

那我們就來重寫 get_premisstion()方法

action 是與函式名保持一致的,放在self 中,只有viewset 是這樣,如果使用api view 就不會這樣了

動態配置premisstion 就解決了。