今天就跟大家聊聊有關如何在Django中使用restframework 框架,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)不只是一家網站建設的網絡公司;我們對營銷、技術、服務都有自己獨特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務!我們經歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關注我們的成都網站制作、成都網站建設質量和服務品質,在得到用戶滿意的同時,也能得到同行業(yè)的專業(yè)認可,能夠為行業(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術創(chuàng)新,服務升級,滿足企業(yè)一站式營銷型網站建設需求,讓再小的品牌網站制作也能產生價值!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中使用restframework 框架有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)成都網站設計公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站題目:如何在Django中使用restframework框架-創(chuàng)新互聯(lián)
文章網址:http://www.bm7419.com/article36/ihopg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、品牌網站設計、微信小程序、動態(tài)網站、網站導航、App開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容