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

Django restframework 框架認證、權限、限流用法示例

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

本文實例講述了Django restframework 框架認證、權限、限流用法。分享給大家供大家參考,具體如下:

概述

Django Rest Framework 是一個強大且靈活的工具包,使用Django REST Framework可以在Django的基礎上迅速實現(xiàn)API,用以構建Web API。

認證Authentication

可以在配置文件中配置全局默認的認證方案

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

也可以在每個視圖中通過設置authentication_classess屬性來設置

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

認證失敗會有兩種可能的返回值:

  • 401 Unauthorized 未認證
  • 403 Permission Denied 權限被禁止

權限Permissions

權限控制可以限制用戶對于視圖的訪問和對于具體數(shù)據(jù)對象的訪問。

  • 在執(zhí)行視圖的dispatch()方法前,會先進行視圖訪問權限的判斷
  • 在通過get_object()獲取具體對象時,會進行對象訪問權限的判斷

使用

可以在配置文件中設置默認的權限管理類,如

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

如果未指明,則采用如下默認配置

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

也可以在具體的視圖中通過permission_classes屬性來設置,如

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

提供的權限

  • AllowAny 允許所有用戶
  • IsAuthenticated 僅通過認證的用戶
  • IsAdminUser 僅管理員用戶
  • IsAuthenticatedOrReadOnly 認證的用戶可以完全操作,否則只能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]

自定義權限

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

  • .has_permission(self, request, view)

是否可以訪問視圖, view表示當前視圖對象

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

是否可以訪問數(shù)據(jù)對象, view表示當前視圖, obj為數(shù)據(jù)對象

例如:

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

限流Throttling

可以對接口訪問的頻次進行限制,以減輕服務器壓力。

使用

可以在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES進行全局配置,

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來指明周期。

也可以在具體視圖中通過throttle_classess屬性來配置,如

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

可選限流類

1) AnonRateThrottle

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

使用DEFAULT_THROTTLE_RATES['anon'] 來設置頻次

2)UserRateThrottle

限制認證用戶,使用User id 來區(qū)分。

使用DEFAULT_THROTTLE_RATES['user'] 來設置頻次

3)ScopedRateThrottle

限制用戶對于每個視圖的訪問頻次,使用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'
 }
}

實例

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,)

希望本文所述對大家基于Django框架的Python程序設計有所幫助。

相關文章

  • Pyhton中單行和多行注釋的使用方法及規(guī)范

    Pyhton中單行和多行注釋的使用方法及規(guī)范

    大家都知道python中的注釋有多種,有單行注釋,多行注釋,批量注釋,中文注釋也是常用的。python注釋也有自己的規(guī)范,這篇文章文章中會給大家詳細介紹Pyhton中單行和多行注釋的使用方法及規(guī)范,有需要朋友們可以參考借鑒。
    2016-10-10
  • Python迭代器與生成器及作用示例詳解

    Python迭代器與生成器及作用示例詳解

    Python生成器在內(nèi)存管理、延遲計算、生成無限序列以及提高代碼簡潔性和可讀性方面都具有重要作用,這篇文章主要介紹了Python迭代器與生成器示例詳解,需要的朋友可以參考下
    2024-02-02
  • Django 項目布局方法(值得推薦)

    Django 項目布局方法(值得推薦)

    這篇文章主要介紹了Django 項目布局方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python各種語言間時間的轉化實現(xiàn)代碼

    python各種語言間時間的轉化實現(xiàn)代碼

    這篇文章主要介紹了python各種語言間時間的轉化,需要的朋友可以參考下
    2016-03-03
  • 如何理解python面向對象編程

    如何理解python面向對象編程

    在本篇文章里小編給大家整理的是關于如何理解python面向對象編程的相關知識點,需要的朋友們可以學習下。
    2020-06-06
  • 用python編寫第一個IDA插件的實例

    用python編寫第一個IDA插件的實例

    今天小編就為大家分享一篇用python編寫第一個IDA插件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python接口測試get請求過程詳解

    Python接口測試get請求過程詳解

    這篇文章主要介紹了python接口測試 get請求過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python為何不支持switch語句原理詳解

    Python為何不支持switch語句原理詳解

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

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

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

    基于Python編寫一個DOS命令輔助工具

    在日常系統(tǒng)管理和維護工作中,執(zhí)行DOS(Disk?Operating?System)命令是一項必不可少的任務,下面我們就來看看如何使用Python編寫一個簡單的DOS命令輔助工具,簡化系統(tǒng)管理任務吧
    2024-01-01

最新評論

塔城市| 木里| 措美县| 枞阳县| 青阳县| 开化县| 德清县| 玉门市| 临清市| 南宫市| 海盐县| 来凤县| 梁河县| 古交市| 上杭县| 彭阳县| 武宁县| 河源市| 宣恩县| 黄龙县| 龙山县| 德格县| 名山县| 双牌县| 徐闻县| 定日县| 郁南县| 新乡市| 马鞍山市| 桂阳县| 大田县| 桐柏县| 波密县| 衡阳市| 林甸县| 临沂市| 昂仁县| 凤阳县| 囊谦县| 富裕县| 阳信县|