drf的序列化組件:
1.作用: 把python中的對象,轉(zhuǎn)成json格式字符串
2. 使用步驟1: 寫一個類繼承Serializer或者ModelSerializer
舉例(類中選取字段進行序列化):
class BookSerializer(serializers.Serializer):
id = serializers.CharField()
title = serializers.CharField()
price = serializers.CharField()
舉例(把類中字段全部進行序列化):
class TestSer(serializers.ModelSerializer):
class Meta:
model = models.Takes
fields = '__all__'
總結(jié):
- 變量名和source指定的值不能一樣
- source='publish.name'還支持繼續(xù) .
- source 還支持方法(沒用)
- 支持寫方法,如下
方法一定傳一個參數(shù),是當前book對象
publish_dic=serializers.SerializerMethodField()
def get_publish_dic(self,obj):
return
結(jié)果:{'id':obj.publish.pk,'name':obj.publish.name}
- 支持寫方法,如下
drf的認證組件
1.認證組件的好處:
比如要訪問books/路徑,必須登錄之后才能訪問铃在。一旦登錄成功,在響應結(jié)果中寫一個隨機字符串
舉例:{status:100
msg:登錄成功
token:sdafsdfasd
}
2.使用步驟1:寫一個類,繼承BaseAuthentication
3.使用步驟2:def authenticate(self,request) ,記住傳request對象
4.在視圖類中使用:(不要加括號):
1.局部使用:authentication_classes=[AuthLogin](寫在views中)
2.全局使用:-REST_FRAMEWORK={"DEFAULT_AUTHENTICATION_CLASSES":["app01.auth.AuthLogin",](在setting中配置)
3.全局使用的局部禁用:authentication_classes = [](寫在views中)
drf的權(quán)限組件:
1.使用步驟1:寫一個類,繼承BasePermission
2.使用步驟2:def has_permission(self, request, view): ,記住傳request對象和view
3.在視圖類中使用:(不要加括號):
1.局部使用:permission_classes=[MyPer](寫在views中)
2.全局使用:-REST_FRAMEWORK={"DEFAULT_PERMISSION_CLASSES":['app01.auth.MyPer']}(在setting中配置)
3.全局使用的局部禁用:permission_classes = [](寫在views中)
drf的節(jié)流組件
1.使用步驟1:寫一個類,繼承SimpleRateThrottle
2.使用步驟2:def get_cache_key(self, request, view):,記住傳request對象和view
3.使用步驟3
:'DEFAULT_THROTTLE_RATES': {
這個key跟scope對應,value值3/m 3/h 4/d
'xx': '3/m'
}(在setting中配置)
節(jié)流作用:節(jié)流(Throttling)類似于權(quán)限,因為它決定了是否應該對請求進行授權(quán)阵具。節(jié)流表示一個臨時狀態(tài),并用于控制客戶端對API的請求率。
DRF視圖的組件
使用:
1.局部使用:throttle_classes = [VisitThrottle](寫在views中)
2.全局使用:REST_FRAMEWORK={"DEFAULT_THROTTLE_CLASSES":["app01.auth.VisitThrottle"]}(在setting中配置)
3.全局使用的局部禁用:throttle_classes = [](寫在views中)
視圖作用: 數(shù)據(jù)庫查詢, 2. 構(gòu)建序列化器, 進行序列化操作, 返回數(shù)據(jù)
drf的解析器
1.局部使用:parser_classes=[JSONParser,](寫在views中)
2.全局使用:'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'](在setting中配置)
解析器作用:解析器的作用就是服務端接收客戶端傳過來的數(shù)據(jù)定铜,把數(shù)據(jù)解析成自己可以處理的數(shù)據(jù)阳液。本質(zhì)就是對請求體中的數(shù)據(jù)進行解析。
drf的渲染器
DRF提供的渲染器有很多揣炕,默認是
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
渲染器的作用:渲染器同解析器相反帘皿,它定義了框架按照content_type來返回不同的響應。
def的分頁組件
1.路由
urlpatterns = [
re_path('(?P<version>[v1|v2]+)/page1/', Pager1View.as_view(),) #分頁1
]
序列化
from rest_framework import serializers
from api import models
class PagerSerialiser(serializers.ModelSerializer):
class Meta:
model = models.Role
fields = "__all__"
視圖
from api.utils.serializsers.pager import PagerSerialiser
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
class Pager1View(APIView):
def get(self,request,*args,**kwargs):
#獲取所有數(shù)據(jù)
roles = models.Role.objects.all()
#創(chuàng)建分頁對象
pg = PageNumberPagination()
#獲取分頁的數(shù)據(jù)
page_roles = pg.paginate_queryset(queryset=roles,request=request,view=self)
#對數(shù)據(jù)進行序列化
ser = PagerSerialiser(instance=page_roles,many=True)
return Response(ser.data)
settings配置
REST_FRAMEWORK = {
#分頁
"PAGE_SIZE":2 #每頁顯示多少個
}
版本的組件
路由的組件
使用方法
創(chuàng)建router對象畸陡,并注冊視圖集鹰溜。