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

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

Django REST framwork的權限驗證實例

瀏覽:272日期: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久久,三上悠亚国产精品一区二区三区
五月婷婷亚洲| 麻豆一区二区在线| 日韩国产欧美三级| 免费在线小视频| 精品不卡一区| 精品资源在线| 欧美午夜三级| 欧美另类中文字幕| 日本国产欧美| 国产麻豆精品| 国产精品国码视频| 精品国产三区在线| 精品一区二区三区的国产在线观看| 日韩专区视频网站| 日本不卡不码高清免费观看| 美日韩精品视频| 亚洲视频电影在线| 亚洲综合福利| 免费成人在线影院| 婷婷亚洲成人| 久久国产婷婷国产香蕉| 久久久免费人体| 日韩国产在线| 亚洲深夜福利| 国产精品资源| 日韩精品水蜜桃| 中文字幕中文字幕精品| 国产精品久久久久久久久久久久久久久 | 日韩视频精品在线观看| 亚洲欧洲av| 日韩精品永久网址| 蜜桃av一区二区在线观看| 天堂va在线高清一区| 国产精品xxxav免费视频| 亚洲成人二区| 久久夜色精品| 国产欧美日韩免费观看| 图片区亚洲欧美小说区| 亚洲精品护士| 国产欧美日韩一级| 999久久久免费精品国产| 日韩精品中文字幕第1页| 国产精品麻豆久久| 欧美日韩国产v| 好吊一区二区三区| 国产精成人品2018| 不卡在线一区二区| 国产精品美女在线观看直播| 日韩欧美自拍| 日韩高清一区| 欧美精品中文| 天堂精品久久久久| 在线一区视频观看| 国产精品久久久久久久久免费高清| 欧美综合另类| 久久精品国产网站| 中文字幕日韩欧美精品高清在线| 国产日韩免费| 尹人成人综合网| 午夜久久中文| 国产欧美午夜| 日韩欧美字幕| 91精品在线观看国产| 日韩精品福利一区二区三区| 久久精品国产亚洲aⅴ| 日韩精品一级二级| 91精品啪在线观看国产18 | 国产一区二区三区不卡视频网站 | 四虎成人精品一区二区免费网站| 国产成人免费| 日韩精品一级| 在线亚洲观看| 成人免费网站www网站高清| 欧美日韩国产综合网| 欧美特黄一区| 国产一区2区在线观看| 国产精品资源| 欧美一区二区三区免费看| 久久国产88| 91精品啪在线观看国产18| 国产激情久久| 欧美日韩亚洲一区在线观看| 欧美特黄一区| 亚洲一区二区毛片| 亚洲欧美日韩综合国产aⅴ| 91偷拍一区二区三区精品| 精品国产成人| 日韩成人精品一区| 成人日韩在线| 婷婷综合五月| 国产精品日韩| 亚洲人www| 欧美日韩伊人| 福利视频一区| 欧美~级网站不卡| 免费日韩一区二区| 香蕉精品视频在线观看| 视频一区二区三区中文字幕| 麻豆精品网站| 久久精品av麻豆的观看方式| 欧美亚洲tv| 日韩毛片网站| 亚洲一级网站| 日本一区二区三区中文字幕| 国产精品日韩精品中文字幕| 国产在线观看91一区二区三区| 欧美1区二区| 亚洲激情中文| 深夜福利亚洲| 神马午夜在线视频| 亚洲视频二区| 国产精品调教| 香蕉精品久久| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精选一区| 一本一道久久a久久精品蜜桃| 亚洲综合图色| 神马午夜在线视频| 日产精品一区二区| 黄色精品网站| 精品久久美女| 亚洲综合另类| 日韩和欧美一区二区| 国产一区二区三区四区五区传媒| 99国产精品视频免费观看一公开 | 亚洲欧美日本国产| 电影亚洲精品噜噜在线观看| 影音先锋久久| zzzwww在线看片免费| 日韩精品一区二区三区中文| 亚洲天堂一区二区| 中文字幕在线高清| 麻豆91精品视频| 中文字幕一区二区三区四区久久| sm久久捆绑调教精品一区| 97成人超碰| 亚洲女同一区| 天堂av在线一区| 欧美.日韩.国产.一区.二区| 电影91久久久| 国产精品红桃| 日韩av一二三| 91成人在线| 日韩精品成人在线观看| 久久亚洲国产精品一区二区| 好看的亚洲午夜视频在线| 成人国产精品久久| 国产免费av国片精品草莓男男| 日韩1区2区日韩1区2区| 欧美日韩精品免费观看视完整 | 亚洲免费福利| 99久久激情| 香蕉精品久久| 婷婷色综合网| 日韩视频一区| 精品入口麻豆88视频| 亚洲一级少妇| 国产精品88久久久久久| 欧美~级网站不卡| 日韩一区二区久久| 视频一区日韩| 综合一区二区三区| 免费看一区二区三区| 老牛国内精品亚洲成av人片 | 精品一区视频| 亚洲二区免费| 国产精品亚洲综合在线观看| 美腿丝袜亚洲一区| 美女网站视频一区| 日本a口亚洲| 日韩中文欧美| 国产精品一区二区三区四区在线观看| 国产精品调教视频| 性欧美xxxx免费岛国不卡电影| 99热精品在线| 欧美亚洲综合视频| 香蕉成人av| 欧美影院视频| 性感美女一区二区在线观看| 免费观看在线综合色| 久久伊人久久| 亚洲在线成人| 精品国产亚洲一区二区三区在线| 视频在线观看91| 国产日韩电影| 国产精品调教| 综合激情网...| 色婷婷狠狠五月综合天色拍| 最新亚洲国产| 99久久亚洲精品蜜臀| 91精品国产自产观看在线| 久久久一本精品| 国产精品久久久久久妇女| 久久国产精品99国产| 水蜜桃精品av一区二区| 亚洲精品极品| 婷婷亚洲五月色综合| 日韩国产一区二区三区| 91亚洲精品视频在线观看| 日韩精品一区二区三区av|