亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

概述

Django Rest Framework 是一個強大且靈活的工具包,使用Django REST Framework可以在Django的基礎上迅速實現(xiàn)API,用以構(gòu)建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程序設計有所幫助。

相關文章

  • 解決Ubuntu18中的pycharm不能調(diào)用tensorflow-gpu的問題

    解決Ubuntu18中的pycharm不能調(diào)用tensorflow-gpu的問題

    這篇文章主要介紹了解決Ubuntu18中的pycharm不能調(diào)用tensorflow-gpu的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Python3.6筆記之將程序運行結(jié)果輸出到文件的方法

    Python3.6筆記之將程序運行結(jié)果輸出到文件的方法

    下面小編就為大家分享一篇Python3.6筆記之將程序運行結(jié)果輸出到文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python編程實現(xiàn)tail-n查看日志文件的方法

    Python編程實現(xiàn)tail-n查看日志文件的方法

    這篇文章主要介紹了Python編程實現(xiàn)tail-n查看日志文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Pycharm IDE的安裝和使用教程詳解

    Pycharm IDE的安裝和使用教程詳解

    這篇文章主要介紹了Pycharm IDE的安裝和使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python屬性私有化詳解

    Python屬性私有化詳解

    私有化是為了實現(xiàn)更好的封裝形式。能隱藏屬性,不被隨意修改。以前置雙下劃線__屬性/方法名定義,但是結(jié)尾不能是雙下劃線。如果不讓某些屬性在類外部被隨意更改,可設置成私有屬性。在類定義的內(nèi)部可以訪問
    2023-02-02
  • 詳解python算法常用技巧與內(nèi)置庫

    詳解python算法常用技巧與內(nèi)置庫

    這篇文章主要介紹了python算法常用技巧與內(nèi)置庫,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Pandas缺失值填充 df.fillna()的實現(xiàn)

    Pandas缺失值填充 df.fillna()的實現(xiàn)

    本文主要介紹了Pandas缺失值填充 df.fillna()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Keras深度學習模型Sequential和Model詳解

    Keras深度學習模型Sequential和Model詳解

    這篇文章主要介紹了Keras深度學習模型Sequential和Model詳解,在Keras中有兩種深度學習的模型:序列模型(Sequential)和通用模型(Model),差異在于不同的拓撲結(jié)構(gòu),,需要的朋友可以參考下
    2023-08-08
  • Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)

    Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能)

    這篇文章主要介紹了Django中使用pillow實現(xiàn)登錄驗證碼功能(帶刷新驗證碼功能),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java判斷三位數(shù)的實例講解

    java判斷三位數(shù)的實例講解

    在本文里小編給大家整理了關于java怎么判斷三位數(shù)的實例方法以及要點總結(jié),需要的朋友們跟著學習下。
    2019-06-06

最新評論