通過(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方法
封裝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ì)象
get_authenticators方法authentication_classes是一個(gè)放置認(rèn)證類(lèi)的列表兼耀,那么get_authenticators方法返回的就是認(rèn)證類(lèi)的實(shí)例化對(duì)象列表,傳入到重寫(xiě)的request對(duì)象中
執(zhí)行initial方法perform_authentication函數(shù)
perform_authentication函數(shù)調(diào)用封裝后的requestd對(duì)象的user
request.user方法調(diào)用了_authenticate方法
_authenticate方法self.authenticators其中self指的是封裝后的request對(duì)象
權(quán)限控制可以限制用戶(hù)對(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 允許所有用戶(hù)
IsAuthenticated 僅通過(guò)認(rèn)證的用戶(hù)
IsAuthenticatedOrReadOnly 認(rèn)證的用戶(hù)可以完全操作官撼,否則只能get讀取
設(shè)立一個(gè)全局變量字典梧躺,對(duì)于匿名用戶(hù),將用戶(hù)的IP作為字典的鍵傲绣;對(duì)于登陸用戶(hù)掠哥,將用戶(hù)的用戶(hù)名作為字典的鍵。設(shè)置字典的值為一個(gè)列表秃诵,列表中存儲(chǔ)了用戶(hù)訪問(wèn)的時(shí)間续搀,可以通過(guò)對(duì)列表中的時(shí)間進(jìn)行操作來(lái)控制訪問(wèn)頻率
setting中的配置
如果使用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ù)端接收客戶(hù)端傳過(guò)來(lái)的數(shù)據(jù)菠净,把數(shù)據(jù)解析成自己想要的數(shù)據(jù)類(lèi)型的過(guò)程
解析器的作用
根據(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 文件配置
局部使用
在view.py中設(shè)置