中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Django中使用restframework 框架

發布時間:2021-06-04 16:56:13 來源:億速云 閱讀:228 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關如何在Django中使用restframework 框架,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Django Rest Framework 是一個強大且靈活的工具包,使用Django REST Framework可以在Django的基礎上迅速實現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

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

  • 在執行視圖的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父類,并實現以下兩個任何一個方法或全部

  • .has_permission(self, request, view)

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

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

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

例如:

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區分用戶。

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

2)UserRateThrottle

限制認證用戶,使用User id 來區分。

使用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中使用restframework 框架有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陈巴尔虎旗| 丹江口市| 乡城县| 商河县| 如东县| 曲沃县| 宁城县| 宝鸡市| 那坡县| 肥西县| 历史| 凌云县| 安塞县| 东丰县| 正定县| 德兴市| 慈溪市| 大渡口区| 五寨县| 文登市| 山阴县| 清流县| 岫岩| 灌云县| 华池县| 乌鲁木齐市| 嫩江县| 明光市| 黎平县| 武鸣县| 邳州市| 延庆县| 双江| 泸州市| 阳高县| 莫力| 郴州市| 淳安县| 琼结县| 罗源县| 凤翔县|