日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django REST framwork的權限驗證實例

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

在這里插入代碼片# Django REST framwork的權限驗證

一、用戶是否登錄

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

permission_classes = (IsAuthenticated, )

注意:permission_classes設置的是:驗證的是用戶是否登錄、用戶是否可以操作該數據等的權限;

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

例如:permission_classes = (SecAdminPermission | AudAdminPermission,)

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

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

authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)

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

具體代碼如下:

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: 判斷某個商品是否已經收藏 create: 收藏商品 delete: 取消收藏 ''' # 權限判斷:IsAuthenticated表示是否已經登錄,IsOwnerOrReadOnly表示數據是不是屬于當前登錄用戶 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) # 方法一:修改商品收藏數 # def perform_create(self, serializer): # '''修改商品收藏數''' # instance = serializer.save() # goods = instance.goods # goods.fav_num += 1 # goods.save() # 動態設置序列化類 def get_serializer_class(self): if self.action == 'list': return UserFavDetailSerializer elif self.action == 'create': return UserFavSerializer return UserFavSerializer

二、用戶是否對該數據有操作權限;

(1)自定義權限驗證

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

from rest_framework import permissions# 權限判斷:數據是不是屬于當前登錄用戶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 寫權限 # Instance must have an attribute named `owner`. # return (obj.publisher if obj.publisher else self.fans )== request.user return obj.user== request.user # 判斷當前數據是不是登錄用戶的數據

(2)在接口中,添加數據權限驗證;

class UserFavViewset(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet): ''' list: 獲取用戶收藏列表 retrieve: 判斷某個商品是否已經收藏 create: 收藏商品 delete: 取消收藏 ''' # 權限判斷:IsAuthenticated表示是否已經登錄,IsOwnerOrReadOnly表示數據是不是屬于當前登錄用戶 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授權與認證

djangorestf 官方文檔 授權與認證教程

permissions.py

from rest_framework import permissionsclass IsOwnerOrReadOnly(permissions.BasePermission): ’’’ 常規的授權是 只有擁有者才能編輯它 ’’’ def has_object_permission(self, request, view, obj): # 讀權限 向所有請求開放 # 所以我們總是允許get, head or options requests. if request.method in permissions.SAFE_METHODS: return True # 寫權限 只給擁有者 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 表示沒有認證的人有讀的權限,認證的人有所有權限 # IsOwnerOrReadOnly 通過了前面的授權之后,還要通過這個授權 # 當所有的授權都通過的時候 所有的對象實例都返回true 表示授權通過 permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly] queryset = Snippet.objects.all() serializer_class = SnippetSerializer

總結:通過傳遞permission_classes 類變量 傳遞授權類,

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

2、傳遞參數將授權類列表中的多個授權類實例化得到實例化對象->

3、調用所有授權實例對象的has_、permission以及has_object_permission方法 ->

4、所有的返回結果都為true ->

5、該操作的授權才通過,數據操作向下繼續進行。

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

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久爱www.| 夜久久久久久| 国产色99精品9i| 日韩av二区在线播放| 日韩av不卡一区二区| 国产黄色精品| 吉吉日韩欧美| 中文在线免费视频| 久久中文字幕av| 亚洲精品一区二区妖精| 国产亚洲综合精品| 日本在线成人| 里番精品3d一二三区| 日韩高清欧美| 美女亚洲一区| 激情视频一区二区三区| aⅴ色国产欧美| 日韩av午夜在线观看| 久久精品日韩欧美| 国产精品99一区二区| 亚洲一二三区视频| 久久亚洲黄色| 国产精品91一区二区三区| 亚洲免费观看高清完整版在线观| 国产日本久久| 国产自产自拍视频在线观看| 91久久视频| 国产精品一区二区中文字幕| 日本久久一区| 日韩欧美一区二区三区在线观看| 午夜久久福利| 国产探花一区| 日韩在线观看不卡| 最新国产精品久久久| 国产福利一区二区精品秒拍| 亚洲成人国产| 国产欧美一区二区三区米奇| 久久免费大视频| 欧美日韩中出| 欧美日韩一二三四| 欧美亚洲tv| 精品一区毛片| 精品一区二区三区四区五区| 欧美一级专区| 国产伦久视频在线观看| 麻豆9191精品国产| 久久久久久色| 午夜久久中文| 欧美在线日韩| 美女少妇全过程你懂的久久| 国产美女久久| 99香蕉国产精品偷在线观看| 精品久久亚洲| 亚洲精品护士| 激情综合自拍| 狠狠躁少妇一区二区三区| 日本成人精品| 亚洲国产一区二区在线观看| 精品国产网站| 欧美亚洲免费| 黄色日韩在线| 国产高潮在线| 国产精品.xx视频.xxtv| 亚洲伊人精品酒店| 婷婷久久一区| 成人三级高清视频在线看| 欧美伊人久久| 三级一区在线视频先锋| 久久精品在线| 国产在线看片免费视频在线观看| 国产欧美日韩在线观看视频| 蜜臀久久久久久久| 欧美精品一区二区三区精品| 欧美激情另类| 久久精品国内一区二区三区| 日韩一区二区三免费高清在线观看| 国产在线成人| 久久精品国产成人一区二区三区| 日韩精品一页| 一区二区三区网站| 最新亚洲一区| 欧美日韩国产探花| 久久av免费看| 国产视频一区二| 日韩福利视频网| 综合欧美亚洲| 日韩有码av| 亚洲专区视频| 综合亚洲自拍| 亚洲tv在线| 蜜桃视频第一区免费观看| 9色精品在线| 先锋影音国产一区| 免费看日韩精品| 蜜臀精品久久久久久蜜臀| 久久不射网站| 久热re这里精品视频在线6| 黄色免费成人| 国产亚洲网站| 亚洲网址在线观看| 亚洲三级av| 国产亚洲一区二区三区不卡| 国产人成精品一区二区三| 国产精品99久久久久久董美香| 免费亚洲婷婷| 国产成人免费视频网站视频社区| 精品国产美女a久久9999| 国产66精品| 97在线精品| 亚洲一本视频| 蜜桃av一区二区| 亚洲精品三级| 国产日韩在线观看视频| 国产精品黄色| 中文字幕一区久| 欧美一区二区三区高清视频| 亚洲欧洲另类| 欧美日韩国产一区二区在线观看| 国产精品亚洲综合久久| 国产成人精品免费视| 国产成人精品一区二区三区在线| 国产成人精品亚洲线观看| 秋霞影视一区二区三区| 亚洲欧美日韩国产一区二区| 日韩精品导航| 91综合视频| 国产亚洲一级| 国产精品色在线网站| 国产精品99视频| 免费观看久久av| 日韩精品免费视频一区二区三区 | 91欧美极品| 国产伊人久久| 性欧美xxxx免费岛国不卡电影| 视频在线在亚洲| 日韩高清电影一区| 国产69精品久久| 婷婷激情综合| 久久免费国产| 亚洲欧美日韩精品一区二区| 日韩区一区二| 久久久国产精品网站| 欧美日一区二区| 欧美一区在线观看视频| 欧美亚洲日本精品| 午夜久久一区| 国产三级一区| 亚洲成人精选| 国产欧美丝祙| 私拍精品福利视频在线一区| 综合在线一区| 在线一区视频观看| 日本午夜精品久久久久| 欧美freesex黑人又粗又大| 蜜臀精品久久久久久蜜臀| 国产一区二区三区黄网站| 免费精品视频在线| 亚洲最新无码中文字幕久久 | 国产精品99在线观看| 亚洲香蕉视频| 福利一区在线| 91嫩草精品| 国产精品毛片一区二区三区| 国产成人久久精品一区二区三区| 最新亚洲国产| 欧美一级精品| 国产一区国产二区国产三区| 婷婷成人av| 一区二区三区视频免费观看| 国产精品115| 日韩精品一区二区三区av | 色婷婷狠狠五月综合天色拍| 久久国产人妖系列| 亚洲制服少妇| 国产 日韩 欧美一区| 欧美激情 亚洲a∨综合| 亚洲精品在线二区| 午夜久久黄色| 日本在线精品| 国产一区丝袜| 国产精品日韩精品中文字幕| 三级一区在线视频先锋| 亚洲天堂黄色| 在线精品亚洲欧美日韩国产| 久久wwww| 国产精品欧美日韩一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 尹人成人综合网| 大香伊人久久精品一区二区| 国产精品magnet| 欧美日韩一视频区二区| 香蕉视频成人在线观看| 国产专区一区| 日韩精品久久久久久久电影99爱 | 日韩1区2区日韩1区2区| 四虎精品永久免费| 亚洲黄色影院| 91超碰国产精品| 狠狠色综合网| 99国产精品私拍|