認(rèn)證,權(quán)限,節(jié)流,解析器

通過(guò)as_view方法,執(zhí)行dispatch函數(shù),在dispatch函數(shù)中通過(guò)request的method方法,調(diào)用視圖類(lèi)的不同函數(shù)
as_view方法, 執(zhí)行dispatch方法
繼承rest framework 的APIView類(lèi)APIView

繼承了Django的View,并且重寫(xiě)了dispatch方法

微信截圖_20190507192303.png

封裝request

request = self.initialize_request(request, *args, **kwargs)
self.request = request

執(zhí)行initial方法

self.initial(request, *args, **kwargs)

封裝的request返回一個(gè)Request類(lèi)的實(shí)例對(duì)象

圖片.png

get_authenticators方法authentication_classes是一個(gè)放置認(rèn)證類(lèi)的列表,那么get_authenticators方法返回的就是認(rèn)證類(lèi)的實(shí)例化對(duì)象列表,傳入到重寫(xiě)的request對(duì)象中

圖片.png

執(zhí)行initial方法perform_authentication函數(shù)

圖片.png

perform_authentication函數(shù)調(diào)用封裝后的requestd對(duì)象的user

圖片.png

request.user方法調(diào)用了_authenticate方法

圖片.png

_authenticate方法self.authenticators其中self指的是封裝后的request對(duì)象

圖片.png

權(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',
)
也可以在具體的視圖中通過(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)證的用戶
IsAuthenticatedOrReadOnly 認(rèn)證的用戶可以完全操作,否則只能get讀取
設(shè)立一個(gè)全局變量字典,對(duì)于匿名用戶,將用戶的IP作為字典的鍵;對(duì)于登陸用戶,將用戶的用戶名作為字典的鍵。設(shè)置字典的值為一個(gè)列表,列表中存儲(chǔ)了用戶訪問(wèn)的時(shí)間,可以通過(guò)對(duì)列表中的時(shí)間進(jìn)行操作來(lái)控制訪問(wèn)頻率


圖片.png

setting中的配置

圖片.png

如果使用URLPathVersioning,路由格式如下

url(r"^(?P<version>[v1|v2]+)/version/",VersionView.as_view(),name='vvvv')

進(jìn)行全局設(shè)置后,用的時(shí)候只需要用request.data就可以自動(dòng)解析數(shù)據(jù)為Json格式

作用就是服務(wù)端接收客戶端傳過(guò)來(lái)的數(shù)據(jù),把數(shù)據(jù)解析成自己想要的數(shù)據(jù)類(lèi)型的過(guò)程


圖片.png

解析器的作用

根據(jù)請(qǐng)求頭 content-type 選擇對(duì)應(yīng)的解析器對(duì)請(qǐng)求體內(nèi)容進(jìn)行處理。
有application/json,x-www-form-urlencoded,form-data等格式

settings.py 文件配置

圖片.png

局部使用

在view.py中設(shè)置


圖片.png

在視圖類(lèi)加上

圖片.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,645評(píng)論 1 32
  • 認(rèn)證Authentication 可以在配置文件中配置全局默認(rèn)的認(rèn)證方案REST_FRAMEWORK = {'DE...
    LiWei_9e4b閱讀 753評(píng)論 0 0
  • 一、restful架構(gòu) 1、restful概述 ——REST即表述性狀態(tài)傳遞(英文:Representationa...
    Zzmi閱讀 1,520評(píng)論 0 2
  • 人活在世,見(jiàn)慣了世間人性的淡漠,就能知道人間真情的可貴,也易被這份真情感動(dòng)。 之前我看過(guò)的一部...
    陸柒啊閱讀 695評(píng)論 3 9
  • 對(duì)感嘆號(hào)很敏感。 很不喜歡那些動(dòng)不動(dòng)就使用感嘆號(hào)的人,我能從字里行間看到他們激動(dòng)或憤怒的情緒。每次和這些人聊天我都...
    綠意蔥蘢閱讀 833評(píng)論 1 1

友情鏈接更多精彩內(nèi)容