电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Django REST framwork的權(quán)限驗證實例

瀏覽:138日期:2024-10-12 14:44:34

在這里插入代碼片# Django REST framwork的權(quán)限驗證

一、用戶是否登錄

(1)判斷用戶是否登錄;

permission_classes = (IsAuthenticated, )

注意:permission_classes設置的是:驗證的是用戶是否登錄、用戶是否可以操作該數(shù)據(jù)等的權(quán)限;

權(quán)限組合方式,目前支持:與&(and) 或|(or) 非~(not)

例如:permission_classes = (SecAdminPermission | AudAdminPermission,)

注意:使用元組 (SecAdminPermission | AudAdminPermission,)或列表[ SecAdminPermission | AudAdminPermission]都可以。

(2)設置用戶認證方式;

authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)

注意:authentication_classes設置的是:用戶可以通過哪種方式登錄系統(tǒng),例如:JWT或傳統(tǒng)的用戶名+密碼方式登錄。

具體代碼如下:

from rest_framework.permissions import IsAuthenticated # 判斷用戶是否登錄from rest_framework_jwt.authentication import JSONWebTokenAuthentication # jwt用戶認證class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): ''' list: 獲取用戶收藏列表 retrieve: 判斷某個商品是否已經(jīng)收藏 create: 收藏商品 delete: 取消收藏 ''' # 權(quán)限判斷:IsAuthenticated表示是否已經(jīng)登錄,IsOwnerOrReadOnly表示數(shù)據(jù)是不是屬于當前登錄用戶 permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) # 用戶認證:方式一:JSONWebTokenAuthentication;方式二:SessionAuthentication authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) # 定義通過哪個參數(shù)來定位實例 lookup_field = 'goods_id' # 在詳細頁面時,搜索goods_id來確認該商品有沒有被收藏,是在當前用戶下進行搜索的 def get_queryset(self): '''獲取當前登錄用戶的收藏信息''' return UserFav.objects.filter(user=self.request.user) # 方法一:修改商品收藏數(shù) # def perform_create(self, serializer): # '''修改商品收藏數(shù)''' # instance = serializer.save() # goods = instance.goods # goods.fav_num += 1 # goods.save() # 動態(tài)設置序列化類 def get_serializer_class(self): if self.action == 'list': return UserFavDetailSerializer elif self.action == 'create': return UserFavSerializer return UserFavSerializer

二、用戶是否對該數(shù)據(jù)有操作權(quán)限;

(1)自定義權(quán)限驗證

前提:待驗證對象有user字段;

from rest_framework import permissions# 權(quán)限判斷:數(shù)據(jù)是不是屬于當前登錄用戶class IsOwnerOrReadOnly(permissions.BasePermission): ''' Object-level permission to only allow owners of an object to edit it. Assumes the model instance has an `owner` attribute. ''' def has_object_permission(self, request, view, obj): # 1 只讀 # Read permissions are allowed to any request, # so we’ll always allow GET, HEAD or OPTIONS requests. if request.method in permissions.SAFE_METHODS: # 是不是安全的訪問方法 return True # 2 寫權(quán)限 # Instance must have an attribute named `owner`. # return (obj.publisher if obj.publisher else self.fans )== request.user return obj.user== request.user # 判斷當前數(shù)據(jù)是不是登錄用戶的數(shù)據(jù)

(2)在接口中,添加數(shù)據(jù)權(quán)限驗證;

class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): ''' list: 獲取用戶收藏列表 retrieve: 判斷某個商品是否已經(jīng)收藏 create: 收藏商品 delete: 取消收藏 ''' # 權(quán)限判斷:IsAuthenticated表示是否已經(jīng)登錄,IsOwnerOrReadOnly表示數(shù)據(jù)是不是屬于當前登錄用戶 permission_classes = (IsAuthenticated, IsOwnerOrReadOnly) # 用戶認證:方式一:JSONWebTokenAuthentication;方式二:SessionAuthentication authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication) # 設置 lookup_field = 'goods_id' # 在詳細頁面時,搜索goods_id來確認該商品有沒有被收藏,是在當前用戶下進行搜索的 def get_queryset(self): '''獲取當前登錄用戶的收藏信息''' return UserFav.objects.filter(user=self.request.user)

補充知識:django rest framework api授權(quán)與認證

djangorestf 官方文檔 授權(quán)與認證教程

permissions.py

from rest_framework import permissionsclass IsOwnerOrReadOnly(permissions.BasePermission): ’’’ 常規(guī)的授權(quán)是 只有擁有者才能編輯它 ’’’ def has_object_permission(self, request, view, obj): # 讀權(quán)限 向所有請求開放 # 所以我們總是允許get, head or options requests. if request.method in permissions.SAFE_METHODS: return True # 寫權(quán)限 只給擁有者 return obj.owner == request.user

view.py

’’’基于泛型類的視圖’’’from snippets.models import Snippetfrom snippets.serializers import SnippetSerializer, UserSerializerfrom rest_framework import genericsfrom snippets.permissions import IsOwnerOrReadOnlyfrom django.contrib.auth.models import Userclass UserList(generics.ListAPIView): ’’’ User表的列表api視圖 查 增 操作 ’’’ queryset = User.objects.all() serializer_class = UserSerializerclass UserDetail(generics.RetrieveDestroyAPIView): ’’’ User表的詳情api視圖 查 改 刪操作 ’’’ queryset = User.objects.all() serializer_class = UserSerializerclass SnippetList(generics.ListCreateAPIView): permission_classes = [permissions.IsAuthenticatedOrReadOnly] queryset = Snippet.objects.all() serializer_class = SnippetSerializer def perform_create(self, serializer): serializer.save(owner=self.request.user)class SnippetDetail(generics.RetrieveDestroyAPIView): # detail 所有人都能讀,但是只有擁有者可以更改 # permissions.IsAuthenticatedOrReadOnly 表示沒有認證的人有讀的權(quán)限,認證的人有所有權(quán)限 # IsOwnerOrReadOnly 通過了前面的授權(quán)之后,還要通過這個授權(quán) # 當所有的授權(quán)都通過的時候 所有的對象實例都返回true 表示授權(quán)通過 permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly] queryset = Snippet.objects.all() serializer_class = SnippetSerializer

總結(jié):通過傳遞permission_classes 類變量 傳遞授權(quán)類,

1、請求要進行某個操作的時候 ->

2、傳遞參數(shù)將授權(quán)類列表中的多個授權(quán)類實例化得到實例化對象->

3、調(diào)用所有授權(quán)實例對象的has_、permission以及has_object_permission方法 ->

4、所有的返回結(jié)果都為true ->

5、該操作的授權(quán)才通過,數(shù)據(jù)操作向下繼續(xù)進行。

以上這篇Django REST framwork的權(quán)限驗證實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Django
相關(guān)文章:
主站蜘蛛池模板: 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 今日扫码_溯源二维码_产品防伪一物一码_红包墙营销方案 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司| 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 屏蔽泵厂家,化工屏蔽泵_维修-淄博泵业 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 发光字|标识设计|标牌制作|精神堡垒 - 江苏苏通广告有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 无缝方管|无缝矩形管|无缝方矩管|无锡方管厂家 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 |