成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Django REST framwork的權限驗證實例

瀏覽:205日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩午夜一区| 久久久精品网| 国产免费成人| 亚洲色图视频免费播放| 欧美ab在线视频| 精品区一区二区| 国产成人av一区二区| 在线精品亚洲一区二区不卡| 亚洲国产精品精华液网站| 亚洲黄色成人| 亚洲欧洲日韩一区二区三区| 国产一区观看| 欧美激情一区二区三区不卡 | 日韩免费视频线观看| 韩国毛片一区二区三区| 欧美日韩黄色一区二区| 免费成人在线观看| 色婷婷精品久久二区二区蜜臀av| 午夜精品久久一牛影视| 亚洲在线视频| 亚洲综合一区二区三区| 一区二区三区高清视频在线观看| 亚洲美女淫视频| 日韩视频在线播放| 亚洲国产中文字幕在线视频综合| 国产日韩欧美高清免费| 亚洲人一二三区| 一本综合精品| 婷婷丁香久久五月婷婷| 色狠狠综合天天综合综合| 日本不卡一区二区三区高清视频| 在线一区二区三区四区五区 | 韩国欧美一区| 亚洲精品高清在线观看| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲欧洲av在线| 日韩亚洲一区在线播放| 亚洲sss视频在线视频| 色老头久久综合| 麻豆专区一区二区三区四区五区| 欧美三级韩国三级日本三斤 | 精品成人一区| 亚洲综合精品久久| 久久国产精品99国产| 美腿丝袜在线亚洲一区| 欧美四级电影网| 精品一区二区免费在线观看| 欧美一区二区精美| 99九九99九九九视频精品| 国产精品久久久久久户外露出 | 国产福利精品一区二区| 欧美刺激午夜性久久久久久久 | 亚洲一卡二卡三卡四卡| 久久人人九九| 国内精品久久久久影院一蜜桃| 欧美一区二区在线播放| 色综合久久综合网欧美综合网| 中文字幕亚洲成人| 久久久蜜桃一区二区人| 国产剧情一区二区| 国产午夜精品福利| 一本色道久久综合亚洲精品不| 日韩黄色小视频| 5月丁香婷婷综合| 色综合色狠狠综合色| 亚洲蜜臀av乱码久久精品| 久久人人97超碰国产公开结果| 国产一区高清在线| 好吊日精品视频| 午夜精品久久久久久不卡8050| 欧美在线影院一区二区| fc2成人免费人成在线观看播放| 国产精品美日韩| 久久看片网站| 成人黄色网址在线观看| 亚洲卡通欧美制服中文| 欧美日韩精品是欧美日韩精品| 91丨porny丨蝌蚪视频| 亚洲精品国产成人久久av盗摄| 在线中文字幕不卡| 成人黄色软件下载| 亚洲女人****多毛耸耸8| 欧美天天综合网| 91原创在线视频| 一区二区不卡在线视频 午夜欧美不卡在| 一本在线高清不卡dvd| 成人av电影在线网| 亚洲免费在线视频一区 二区| 91福利视频网站| 午夜精品偷拍| 乱一区二区av| 国产精品乱码一区二区三区软件 | 亚洲日本国产| 国产乱妇无码大片在线观看| 国产精品乱码人人做人人爱| 91福利视频久久久久| 午夜国产欧美理论在线播放| 亚洲成av人片一区二区梦乃 | 色综合av在线| 91色在线porny| 日韩精品国产精品| 国产偷国产偷亚洲高清人白洁| 欧美性猛交xxxx黑人交| 亚洲性色视频| 国产精品888| 一区二区三区四区高清精品免费观看| 91精品国产免费| 夜夜爽99久久国产综合精品女不卡| 国产九色精品成人porny| 亚洲视频网在线直播| 7777精品久久久大香线蕉 | 国产日韩欧美一区在线| eeuss鲁片一区二区三区在线看| 五月婷婷综合激情| 国产欧美日韩麻豆91| 91久久精品一区二区三| 亚洲一二区在线| 国产不卡视频在线观看| 一区二区三区高清| 久久精子c满五个校花| 欧美亚洲综合久久| 亚洲毛片一区| 成人午夜电影小说| 麻豆精品久久久| 艳妇臀荡乳欲伦亚洲一区| 久久久久久亚洲综合| 欧美精品自拍偷拍| 久久国产精品久久精品国产 | 国产精品大片| 国产福利一区二区三区| 无吗不卡中文字幕| 亚洲人成网站影音先锋播放| 精品欧美一区二区在线观看| 欧洲激情一区二区| 亚洲精品一区二区三区av| 国产.欧美.日韩| 日韩国产欧美视频| 亚洲人快播电影网| 久久婷婷久久一区二区三区| 欧美日韩大陆在线| 免费国产一区二区| 亚洲视频狠狠| av资源网一区| 国产成人在线看| 六月丁香综合在线视频| 午夜精品久久久久久久99水蜜桃| 国产精品久久久久影院| www国产成人免费观看视频 深夜成人网| 欧美日韩一区二区电影| 羞羞视频在线观看欧美| 好吊日精品视频| 91免费小视频| 成人一区二区在线观看| 久久99精品网久久| 婷婷中文字幕一区三区| 一区二区在线观看不卡| 国产精品久久久久7777按摩| 久久久久久久精| 精品免费视频一区二区| 欧美日韩日日摸| 色久综合一二码| 久久精品一区二区国产| 一区二区日韩免费看| 在线精品观看| 国内自拍一区| 欧美日韩国产探花| 色综合久久中文综合久久97| 成人av资源在线观看| 高清不卡一二三区| 国产精品小仙女| 激情亚洲综合在线| 狠狠色狠狠色合久久伊人| 久久 天天综合| 黑人巨大精品欧美一区| 狠狠色狠狠色综合系列| 国产精品一区免费视频| 国产老妇另类xxxxx| 懂色一区二区三区免费观看| 国产成人亚洲综合a∨婷婷| 国产精品一区二区久久精品爱涩 | 亚洲香肠在线观看| 一区二区三区四区中文字幕| 亚洲三级免费观看| 亚洲美女电影在线| 亚洲精品国产精华液| 亚洲精选在线视频| 亚洲综合免费观看高清完整版| 亚洲一二三四在线观看| 亚洲午夜一二三区视频| 午夜视频在线观看一区二区三区| 亚洲已满18点击进入久久| 亚洲午夜私人影院| 爽好久久久欧美精品| 五月综合激情婷婷六月色窝| 青青草视频一区| 国产乱码一区二区三区| 成人一级黄色片| 欧美国产另类| 在线日韩av| 久久久蜜桃一区二区人|