最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django restframework 框架認(rèn)證、權(quán)限、限流用法示例

 更新時(shí)間:2019年12月21日 10:28:03   作者:Dylan HU  
這篇文章主要介紹了Django restframework 框架認(rèn)證、權(quán)限、限流用法,結(jié)合實(shí)例形式詳細(xì)分析了Djangorestframework 框架認(rèn)證、權(quán)限、限流的具體使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Django restframework 框架認(rèn)證、權(quán)限、限流用法。分享給大家供大家參考,具體如下:

概述

Django Rest Framework 是一個(gè)強(qiáng)大且靈活的工具包,使用Django REST Framework可以在Django的基礎(chǔ)上迅速實(shí)現(xiàn)API,用以構(gòu)建Web API。

認(rèn)證Authentication

可以在配置文件中配置全局默認(rèn)的認(rèn)證方案

REST_FRAMEWORK = {
 'DEFAULT_AUTHENTICATION_CLASSES': (
  'rest_framework.authentication.BasicAuthentication', # 基本認(rèn)證
  'rest_framework.authentication.SessionAuthentication', # session認(rèn)證
 )
}

也可以在每個(gè)視圖中通過(guò)設(shè)置authentication_classess屬性來(lái)設(shè)置

from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework.views import APIView
class ExampleView(APIView):
 authentication_classes = (SessionAuthentication, BasicAuthentication)
 ...

認(rèn)證失敗會(huì)有兩種可能的返回值:

  • 401 Unauthorized 未認(rèn)證
  • 403 Permission Denied 權(quán)限被禁止

權(quán)限Permissions

權(quán)限控制可以限制用戶對(duì)于視圖的訪問(wèn)和對(duì)于具體數(shù)據(jù)對(duì)象的訪問(wèn)。

  • 在執(zhí)行視圖的dispatch()方法前,會(huì)先進(jìn)行視圖訪問(wèn)權(quán)限的判斷
  • 在通過(guò)get_object()獲取具體對(duì)象時(shí),會(huì)進(jìn)行對(duì)象訪問(wèn)權(quán)限的判斷

使用

可以在配置文件中設(shè)置默認(rèn)的權(quán)限管理類,如

REST_FRAMEWORK = {
 'DEFAULT_PERMISSION_CLASSES': (
  'rest_framework.permissions.IsAuthenticated',
 )
}

如果未指明,則采用如下默認(rèn)配置

'DEFAULT_PERMISSION_CLASSES': (
 'rest_framework.permissions.AllowAny',
)

也可以在具體的視圖中通過(guò)permission_classes屬性來(lái)設(shè)置,如

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
class ExampleView(APIView):
 permission_classes = (IsAuthenticated,)
 ...

提供的權(quán)限

  • AllowAny 允許所有用戶
  • IsAuthenticated 僅通過(guò)認(rèn)證的用戶
  • IsAdminUser 僅管理員用戶
  • IsAuthenticatedOrReadOnly 認(rèn)證的用戶可以完全操作,否則只能get讀取

舉例

from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import RetrieveAPIView
class BookDetailView(RetrieveAPIView):
 queryset = BookInfo.objects.all()
 serializer_class = BookInfoSerializer
 authentication_classes = [SessionAuthentication]
 permission_classes = [IsAuthenticated]

自定義權(quán)限

如需自定義權(quán)限,需繼承rest_framework.permissions.BasePermission父類,并實(shí)現(xiàn)以下兩個(gè)任何一個(gè)方法或全部

  • .has_permission(self, request, view)

是否可以訪問(wèn)視圖, view表示當(dāng)前視圖對(duì)象

  • .has_object_permission(self, request, view, obj)

是否可以訪問(wèn)數(shù)據(jù)對(duì)象, view表示當(dāng)前視圖, obj為數(shù)據(jù)對(duì)象

例如:

class MyPermission(BasePermission):
 def has_object_permission(self, request, view, obj):
  """控制對(duì)obj對(duì)象的訪問(wèn)權(quán)限,此案例決絕所有對(duì)對(duì)象的訪問(wèn)"""
  return False
class BookInfoViewSet(ModelViewSet):
 queryset = BookInfo.objects.all()
 serializer_class = BookInfoSerializer
 permission_classes = [IsAuthenticated, MyPermission]

限流Throttling

可以對(duì)接口訪問(wèn)的頻次進(jìn)行限制,以減輕服務(wù)器壓力。

使用

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES進(jìn)行全局配置,

REST_FRAMEWORK = {
 'DEFAULT_THROTTLE_CLASSES': (
  'rest_framework.throttling.AnonRateThrottle',
  'rest_framework.throttling.UserRateThrottle'
 ),
 'DEFAULT_THROTTLE_RATES': {
  'anon': '100/day',
  'user': '1000/day'
 }
}

DEFAULT_THROTTLE_RATES 可以使用 second, minute, hour 或day來(lái)指明周期。

也可以在具體視圖中通過(guò)throttle_classess屬性來(lái)配置,如

from rest_framework.throttling import UserRateThrottle
from rest_framework.views import APIView
class ExampleView(APIView):
 throttle_classes = (UserRateThrottle,)
 ...

可選限流類

1) AnonRateThrottle

限制所有匿名未認(rèn)證用戶,使用IP區(qū)分用戶。

使用DEFAULT_THROTTLE_RATES['anon'] 來(lái)設(shè)置頻次

2)UserRateThrottle

限制認(rèn)證用戶,使用User id 來(lái)區(qū)分。

使用DEFAULT_THROTTLE_RATES['user'] 來(lái)設(shè)置頻次

3)ScopedRateThrottle

限制用戶對(duì)于每個(gè)視圖的訪問(wèn)頻次,使用ip或user id。

例如:

class ContactListView(APIView):
 throttle_scope = 'contacts'
 ...
class ContactDetailView(APIView):
 throttle_scope = 'contacts'
 ...
class UploadView(APIView):
 throttle_scope = 'uploads'
 ...
REST_FRAMEWORK = {
 'DEFAULT_THROTTLE_CLASSES': (
  'rest_framework.throttling.ScopedRateThrottle',
 ),
 'DEFAULT_THROTTLE_RATES': {
  'contacts': '1000/day',
  'uploads': '20/day'
 }
}

實(shí)例

from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import RetrieveAPIView
from rest_framework.throttling import UserRateThrottle
class BookDetailView(RetrieveAPIView):
 queryset = BookInfo.objects.all()
 serializer_class = BookInfoSerializer
 authentication_classes = [SessionAuthentication]
 permission_classes = [IsAuthenticated]
 throttle_classes = (UserRateThrottle,)

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 用python編寫第一個(gè)IDA插件的實(shí)例

    用python編寫第一個(gè)IDA插件的實(shí)例

    今天小編就為大家分享一篇用python編寫第一個(gè)IDA插件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python接口測(cè)試get請(qǐng)求過(guò)程詳解

    Python接口測(cè)試get請(qǐng)求過(guò)程詳解

    這篇文章主要介紹了python接口測(cè)試 get請(qǐng)求過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python為何不支持switch語(yǔ)句原理詳解

    Python為何不支持switch語(yǔ)句原理詳解

    這篇文章主要介紹了Python為何不支持switch語(yǔ)句原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python遞歸算法(無(wú)限遞歸,正常遞歸,階乘)

    python遞歸算法(無(wú)限遞歸,正常遞歸,階乘)

    本文主要介紹了python遞歸算法,包含無(wú)限遞歸,正常遞歸,階乘等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 基于Python編寫一個(gè)DOS命令輔助工具

    基于Python編寫一個(gè)DOS命令輔助工具

    在日常系統(tǒng)管理和維護(hù)工作中,執(zhí)行DOS(Disk?Operating?System)命令是一項(xiàng)必不可少的任務(wù),下面我們就來(lái)看看如何使用Python編寫一個(gè)簡(jiǎn)單的DOS命令輔助工具,簡(jiǎn)化系統(tǒng)管理任務(wù)吧
    2024-01-01
  • 最新評(píng)論

    铜川市| 高阳县| 德清县| 土默特右旗| 合水县| 曲沃县| 永德县| 开鲁县| 丹凤县| 屯昌县| 凤山县| 永寿县| 绍兴县| 庆阳市| 元谋县| 临沧市| 开封县| 海门市| 抚顺市| 女性| 交城县| 万源市| 武陟县| 海安县| 临漳县| 嵩明县| 阳山县| 永定县| 静海县| 绥化市| 孟村| 增城市| 淮北市| 皋兰县| 高邑县| 阜宁县| 玉树县| 漳平市| 康乐县| 班玛县| 金平|