青青草原综合久久大伊人精品_国产免费av片在线观看浪潮_成在 线 人视频在线观看_9传媒在线观看免费_色噜噜狠狠色综合无码

品牌 資訊 搭配 材料 時尚 熱點 行業(yè) 首飾 玉石 行情

DRF的權(quán)限組件(源碼分析)

2023-04-22 07:42:49 來源:博客園


(資料圖片僅供參考)

DRF的權(quán)限組件(源碼分析)

1. 創(chuàng)建用戶表

from django.db import models# Create your models here.class UserInfo(models.Model):    role_choice = ((1, "CEO"), (2, "CTO"), (3, "CFO"))    role = models.SmallIntegerField(verbose_name="類型", choices=role_choice, default=1)    username = models.CharField(verbose_name="用戶名", max_length=32)    password = models.CharField(verbose_name="密碼", max_length=32)    token = models.CharField(verbose_name="TOKEN", max_length=64, null=True, blank=True)

2. 自定義權(quán)限類

from rest_framework.permissions import BasePermissionclass PermissionA(BasePermission):    message = {"code": 1003, "data": "無權(quán)訪問"}    def has_permission(self, request, view):        if request.user.role == 2:            return True        return False    def has_object_permission(self, request, view, obj):        return True

3. 視圖函數(shù)中添加認證

  • 局部配置(views.py)
class UserView(APIView):    permission_classes = [PermissionA, ]  # role權(quán)限        def get(self, request):        ...
  • 全局配置(settings.py)
REST_FRAMEWORK = {    # 權(quán)限    "DEFAULT_PERMISSION_CLASSES": ["app01.permission.PermissionA", ]}

4. 多個權(quán)限類

當(dāng)開發(fā)過程中需要用戶同時具備多個權(quán)限(缺一不可)時,可以用多個權(quán)限類來實現(xiàn)。

權(quán)限組件內(nèi)部處理機制:按照列表的順序逐一執(zhí)行 has_permission方法,如果返回True,則繼續(xù)執(zhí)行后續(xù)的權(quán)限類;如果返回None或False,則拋出權(quán)限異常并停止后續(xù)權(quán)限類的執(zhí)行。

# models.pyfrom django.db import modelsclass Role(models.Model):    """ 角色表 """    title = models.CharField(verbose_name="名稱", max_length=32)class UserInfo(models.Model):    """ 用戶表 """    username = models.CharField(verbose_name="用戶名", max_length=32)    password = models.CharField(verbose_name="密碼", max_length=64)    token = models.CharField(verbose_name="TOKEN", max_length=64, null=True, blank=True)    roles = models.ManyToManyField(verbose_name="角色", to="Role")
# urls.pyfrom django.urls import path, re_path, includefrom app01 import viewsurlpatterns = [    path("api/auth/", views.AuthView.as_view()),    path("api/order/", views.OrderView.as_view()),]
# views.pyimport uuidfrom rest_framework.views import APIViewfrom rest_framework.request import Requestfrom rest_framework.response import Responsefrom rest_framework.authentication import BaseAuthenticationfrom rest_framework.permissions import BasePermissionfrom rest_framework.exceptions import AuthenticationFailedfrom app01 import modelsclass AuthView(APIView):    """ 用戶登錄認證 """    def post(self, request, *args, **kwargs):        print(request.data)  # {"username": "wupeiqi", "password": "123"}        username = request.data.get("username")        password = request.data.get("password")        user_object = models.UserInfo.objects.filter(username=username, password=password).first()        if not user_object:            return Response({"code": 1000, "data": "用戶名或密碼錯誤"})        token = str(uuid.uuid4())        user_object.token = token        user_object.save()        return Response({"code": 0, "data": {"token": token, "name": username}})class TokenAuthentication(BaseAuthentication):    def authenticate(self, request):        token = request.query_params.get("token")        if not token:            raise AuthenticationFailed({"code": 1002, "data": "認證失敗"})        user_object = models.UserInfo.objects.filter(token=token).first()        if not user_object:            raise AuthenticationFailed({"code": 1002, "data": "認證失敗"})        return user_object, token    def authenticate_header(self, request):        return "Bearer realm="API""class PermissionA(BasePermission):    message = {"code": 1003, "data": "無權(quán)訪問"}    def has_permission(self, request, view):        exists = request.user.roles.filter(title="員工").exists()        if exists:            return True        return False    def has_object_permission(self, request, view, obj):        return Trueclass PermissionB(BasePermission):    message = {"code": 1003, "data": "無權(quán)訪問"}    def has_permission(self, request, view):        exists = request.user.roles.filter(title="主管").exists()        if exists:            return True        return False    def has_object_permission(self, request, view, obj):        return Trueclass OrderView(APIView):    authentication_classes = [TokenAuthentication, ]    permission_classes = [PermissionA, PermissionA]    def get(self, request, *args, **kwargs):        return Response({"code": 0, "data": {"user": None, "list": [1, 2, 3]}})class PayView(APIView):    authentication_classes = [TokenAuthentication, ]    permission_classes = [PermissionA, ]    def get(self, request, *args, **kwargs):        return Response({"code": 0, "data": "數(shù)據(jù)..."})

5. 關(guān)于has_object_permission

后期補充...

6. 源碼分析

第三步前面的部分執(zhí)行流程和前兩篇文章是一樣的. 這里就不過多贅述了

標(biāo)簽:

(責(zé)任編輯:)

相關(guān)文章

DRF的權(quán)限組件(源碼分析)

?DRF的權(quán)限組件(源碼分析)1 創(chuàng)建用戶表fromdjango dbimportmodels Createyourmodelshere classUserInfo(model

2023-04-22 07:42:49

全球即時:真品元青花釉里紅底部特征-元青花釉里紅特點

?1、你這個肯定不是,首先元朝釉里紅的顏色沒有這么紅。2、還有是釉里紅的暈散你的沒有,還有聚點,。本文到

2023-04-22 07:14:51

郭德綱夫人王慧圖片_郭德綱夫人王慧

?1、郭德綱老婆王慧,原天津著名京韻大鼓演員,現(xiàn)在管理德云社及其其他產(chǎn)業(yè)。2、天津著名京韻大鼓演員,著名

2023-04-22 06:57:12

環(huán)球觀速訊丨春日打卡必勝客,開啟一段沉浸式“非遺盛宴”

?近日,一場別開生面的“上海非遺金山農(nóng)民畫體驗活動“在必勝客上海邯鄲餐廳舉辦?;顒又?,非遺代表性傳承人

2023-04-22 06:49:37

央行對2家拒收人民幣現(xiàn)金的單位及責(zé)任人作出處罰

?4月21日,央行發(fā)布2023年第一季度拒收人民幣現(xiàn)金處罰情況,依法對2家拒收人民幣現(xiàn)金的單位及相關(guān)責(zé)任人作出

2023-04-22 06:12:25

仕佳光子(688313)2023年一季報簡析:凈利潤減113.98%,三費占比上升明顯

?據(jù)證券之星公開數(shù)據(jù)整理,近期仕佳光子(688313)發(fā)布2023年一季報。根據(jù)財報顯示,本報告期中仕佳光子凈利

2023-04-22 05:52:38

??谛阌^(qū)招商推介會北京站成功舉辦[圖]_世界短訊

?近日,??谑行阌^(qū)“錦繡自貿(mào)港群英共未來”招商推介會北京站成功舉辦,吸引了丹麥CG集團、百度智能云、北

2023-04-22 05:56:02

3年的堅持與守護,杭州南站志愿者只為完成一個承諾!

?4月20日,杭州南站志愿服務(wù)隊收到了一份來自“老朋友”的禮物。殘疾人旅客潘和忠向杭州南站志愿服務(wù)隊送上

2023-04-22 04:58:37

車?yán)遄雍蜋烟沂且环N水果嗎_車?yán)遄邮遣皇菣烟?熱訊

?車?yán)遄雍蜋烟沂且环N水果嗎,車?yán)遄邮遣皇菣烟液芏嗳诉€不知道,現(xiàn)在讓我們一起來看看吧!解答:1、櫻桃就是

2023-04-22 04:41:28

商務(wù)部:一季度我國企業(yè)承接服務(wù)外包合同額5768億元 同比增長18.2%|當(dāng)前時訊

?2023年一季度,我國企業(yè)承接服務(wù)外包合同額5768億元人民幣,執(zhí)行額3961億元,同比分別增長18 2%和24 4%。

2023-04-22 04:21:57

我的世界信標(biāo)放在哪里比較好_我的世界信標(biāo)怎么擺放才可以有全效果|天天熱頭條

?1、九個格子方鐵 黃金 鉆石 綠寶石塊鐵鐵鐵鐵鐵鐵鐵鐵鐵鐵鐵鐵鐵信標(biāo)鐵鐵鐵鐵。本文分享完畢,希望對大家有

2023-04-22 03:44:58

環(huán)球熱文:外交部發(fā)言人:敦促美國等發(fā)達國家審慎評估自身經(jīng)濟金融政策外溢影響

?新華社北京4月20日電(記者馬卓言)外交部發(fā)言人汪文斌20日表示,當(dāng)前國際金融風(fēng)險突出,同美國等發(fā)達國家

2023-04-22 03:14:15

瀘州老窖:公司擁有數(shù)十萬噸的基酒儲存能力,不同產(chǎn)品有不同的儲存時間要求

?瀘州老窖00056804月21日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題投資者您好尊敬的董秘山東淄博燒烤火遍全

2023-04-22 03:06:38

今日時訊:足球報玉昆接過大旗為云南而戰(zhàn) 牛洪利重返夢想之地為云南打造名片_環(huán)球即時

?小伙伴們好,帶大家回顧下足球報玉昆接過大旗為云南而戰(zhàn)牛洪利重返夢想之地為云南打造名片,那么小縱今天就

2023-04-22 02:56:35

景甜訴廣告公司侵權(quán) 廣告公司涉侵權(quán)糾紛被景甜起訴|最新資訊

?天眼查App顯示,近日,上海網(wǎng)策廣告有限公司新增開庭公告,案由為網(wǎng)絡(luò)侵權(quán)責(zé)任糾紛,原告為景甜,該案將于5

2023-04-22 02:24:57

【世界報資訊】阿卡索外教課好嗎_阿卡索外教怎么樣

?1、阿卡索外教老師是第一大坑。2、阿卡索外教一直強調(diào)他們是歐美老師上課,還保證每天都能上課。3、實際上

2023-04-22 02:39:30

以色列駐華大使在2023年世界地球日前夕呼吁各方合作 創(chuàng)新應(yīng)對環(huán)境問題

?國際在線消息(記者潘曉琳):為迎接2023年世界地球日(每年4月22日),4月19日,以色列駐華大使潘綺瑞(H E

2023-04-22 01:55:33

知識產(chǎn)權(quán)為“制造業(yè)當(dāng)家”添動能

?加強知識產(chǎn)權(quán)法治保障,才能有力支持全面創(chuàng)新,昨晚(20日),2023年全國知識產(chǎn)權(quán)宣傳周活動啟動儀式的分會

2023-04-22 01:45:06

【天天聚看點】浙江省博物館武林館區(qū)閉館后再也不開了嗎?

?浙江省博物館武林館區(qū)閉館后再也不開了嗎?浙江省博物館武林館將于2023年5月4日正式閉館,閉館后將搬遷至浙

2023-04-22 01:02:45

cf空白代碼在線生成器(cf空白代碼)

?1、cf空白名字代碼最新的,能用的:cf一般可以通過各種輸入法打出空格的昵稱,這樣的方法還是比較靠譜的。2

2023-04-22 00:32:20

天天日報丨河北古稀皮影人:在流轉(zhuǎn)的燈影里守護傳承

?河北古稀皮影人:在流轉(zhuǎn)的燈影里守護傳承  【解說】在河北省秦皇島市昌黎縣有一種古老的劇種——皮影戲,

2023-04-22 00:37:02

天天速訊:鐘聲:霸權(quán)霸道霸凌行徑破壞和平、侵犯人權(quán)

?美國白宮日前發(fā)布阿富汗撤軍行動調(diào)查報告,承認在撤軍過程中存在“巨大的情報失敗”,將倉皇撤軍責(zé)任歸咎于

2023-04-22 00:11:36

jpg和pdf哪個更清晰_jpg 和PDF的區(qū)別-天天快報

?1、PDF格式是由Adobe公司推出的專為網(wǎng)上出版而制訂的。2、它以PostscriptLevel2語言為基礎(chǔ),可以

2023-04-21 23:28:37

新冠病毒 XBB.1.16 可能引發(fā)結(jié)膜炎,專家:無需太過擔(dān)憂 快播

?(人民日報健康客戶端記者張爽楊曉露)4月18日,奧密克戎亞種XBB 1 16引起廣泛討論,XBB 1 16感染者出現(xiàn)結(jié)

2023-04-21 23:13:39

2023年4月20日雞蛋價格偏強而行金十期貨4月20日訊,當(dāng)前我國在產(chǎn)蛋雞存欄整體仍偏低,庫存不大,供應(yīng)上仍能提供支撐

?2023年4月20日雞蛋價格偏強而行金十期貨4月20日訊,當(dāng)前我國在產(chǎn)蛋雞存欄整體仍偏低,庫存不大,供應(yīng)上仍能

2023-04-21 22:53:21

國光電器(002045):技術(shù)指標(biāo)出現(xiàn)看漲信號-KDJ 低位金叉(04-20) 環(huán)球速遞

?從技術(shù)指標(biāo)上看,國光電器(002045)出現(xiàn)看漲信號-KDJ低位金叉,后續(xù)有望上漲。資金流向數(shù)據(jù):主力資金凈流

2023-04-21 22:23:40

【世界獨家】甘肅省古浪縣市場監(jiān)管局開展農(nóng)資打假保春耕專項行動

?為進一步規(guī)范農(nóng)資市場經(jīng)營秩序,嚴(yán)厲打擊制售假冒偽劣農(nóng)資等違法行為,甘肅省古浪縣市場監(jiān)管局在全縣范圍內(nèi)

2023-04-21 21:42:18

黃金TD今日走勢如何?2022年3月7日黃金TD價格多少?

?周一(3月7日),黃金TD維持小幅上漲。本交易日,黃金TD開于372 3元 克,最高上探至380 48元 克,最低下探371

2023-04-21 21:36:59

大宗交易:招商銀行成交1.31億元,成交均價34.50元(04-21)

?2023年4月21日,招商銀行發(fā)生3筆大宗交易,總成交380萬股,成交金額1 31億元,成交均價34 50元,成交價與收

2023-04-21 21:16:48

新資訊:北方國際4月21日盤中跌幅達5%

?以下是北方國際在北京時間4月21日14:47分盤口異動快照:4月21日,北方國際盤中跌幅達5%,截至14點47分,報1

2023-04-21 20:35:34