今天就跟大家聊聊有關(guān)如何在Django中使用restframework 框架,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
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)限管理類(lèi),如
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父類(lèi),并實(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,) ...
可選限流類(lèi)
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,)
看完上述內(nèi)容,你們對(duì)如何在Django中使用restframework 框架有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站題目:如何在Django中使用restframework框架-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://aaarwkj.com/article36/ihopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)、微信小程序、動(dòng)態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容