重點(diǎn)內(nèi)容回顧-DRF
文章共: 4391字 4圖
預(yù)計(jì)閱讀時(shí)間: 15分鐘
每日分享
Overthinking ruins you. Ruins the situation, twists it around, makes you worry and just makes everything much worse than it actually is.
過(guò)度的思考會(huì)毀了你埋虹。使你現(xiàn)在的處境糟糕驹马,讓你曲解其中的意思,讓你擔(dān)憂(yōu)叫搁,讓每一件事都變的更加的糟糕甩鳄。
小閆語(yǔ)錄:
事情不要看太透逞度,做人不要太精明。不知道你有沒(méi)有聽(tīng)說(shuō)過(guò)一個(gè)詞『大智若愚』妙啃,它是一種大智慧档泽,有德有智,看透萬(wàn)物揖赴,但是不去計(jì)較那么多馆匿。將格局放大,將眼光放遠(yuǎn)燥滑,你會(huì)發(fā)現(xiàn)不一樣的世界渐北。也許你會(huì)為了一件小事耿耿于懷,也許你會(huì)因?yàn)橐患嵤戮镁貌荒茚寫(xiě)衙。踔劣绊懥四阏5纳钤咧搿2⒉皇钦f(shuō)你錯(cuò),在這件事上你占理搀菩,這件事你想的沒(méi)錯(cuò)呕臂,只是它不值得你去花費(fèi)如此多的精力罷了。將所有的精力放在你主要的事情上肪跋,對(duì)于一些瑣事歧蒋、一些惹惱的小人,一些阻礙你前進(jìn)的事物澎嚣,不妨看淡一點(diǎn)疏尿,暫時(shí)的妥協(xié)并不是向他們低頭,而是跟本沒(méi)把他們放在心上易桃。事情不要想的的太透褥琐,太過(guò)的執(zhí)拗會(huì)讓你走向錯(cuò)誤的方向,點(diǎn)到即止晤郑,一句話(huà)也許只是表面意思敌呈,并沒(méi)有那么多深層意思贸宏。做人不要太精明,看透不說(shuō)透磕洪,不要將自己過(guò)的那么累吭练,也不要給別人難堪。
1.on_delete
on_delete
是定義模型類(lèi)中外鍵的一個(gè)選項(xiàng)析显。
on_delete
選項(xiàng)指明的是主表刪除數(shù)據(jù)的時(shí)候鲫咽,對(duì)于外鍵引用的表數(shù)據(jù)如何處理。
在django.db.models中包含了可選的常量谷异,常用的有三種:
a.CASCADE級(jí)聯(lián)分尸,刪除主表數(shù)據(jù)的時(shí)候,連同刪除外鍵表中的數(shù)據(jù)歹嘹。這個(gè)就有點(diǎn)狠了箩绍,按需求慎用。
b.PROTECT保護(hù)尺上,通過(guò)拋出一個(gè)異常ProtectedError異常材蛛,來(lái)阻止刪除主表中被外鍵引用的數(shù)據(jù)。
c.SET_NULL設(shè)置為NULL
怎抛,代表的是主表刪除數(shù)據(jù)的時(shí)候卑吭,將外鍵關(guān)聯(lián)的表數(shù)據(jù)設(shè)置為NULL。僅僅在該字段null=True抽诉,允許為null時(shí)可用陨簇。
2.related_name
related_name
是在定義模型類(lèi)時(shí)吐绵,外鍵的一個(gè)選項(xiàng)迹淌。它的功能下面慢慢給大家分析一下。
之前我們?cè)跀?shù)據(jù)庫(kù)查詢(xún)操作中己单,由一查多的時(shí)候唉窃,是下面的操作:
# 1.查詢(xún)id為200001的地區(qū)
area = Area.objects.get(id=200001)
# 2.查詢(xún)area的下級(jí)地區(qū)
# 由一查多:一對(duì)象.多類(lèi)名小寫(xiě)__set.all()
sub_areas = area.area_set.all()
一旦設(shè)置了related_name='subs'
的時(shí)候,我們查詢(xún)area的下級(jí)地區(qū)的時(shí)候纹笼,就可以改為下面的操作:
sub_areas = area.subs.all()
相當(dāng)于是將多類(lèi)名小寫(xiě)_set
改為了related_name設(shè)置的subs
纹份。是不是很方便呢?
ForeignKey('self')
代表的是自關(guān)聯(lián)
3.一些常用的命令
a. 創(chuàng)建Django工程:
django-admin startproject 工程名稱(chēng)
b. 創(chuàng)建子應(yīng)用:
python manage.py startapp 子應(yīng)用名稱(chēng)
c. 使用shell:
python manage.py shell
d. 打開(kāi)celery執(zhí)行者:(一定要在celery的目錄上一級(jí)打開(kāi)打開(kāi)終端執(zhí)行命令)
celery -A celery目錄.main worker -l 日志級(jí)別
celery -A celery_task.main worker -l info
e. 我們?cè)O(shè)置了前端開(kāi)發(fā)服務(wù)器廷痘,所以每次使用的時(shí)候一定要記得打開(kāi):(在靜態(tài)文件目錄下執(zhí)行下面的命令)
live-server
f. 遷移
生成遷移文件:
python manage.py makemigrations
同步到數(shù)據(jù)庫(kù)中:
python manage.py migrate
g. MySQL數(shù)據(jù)庫(kù)中修改表中數(shù)據(jù):
update 表名 set 字段名=要改的值 [where 查詢(xún)指定數(shù)據(jù)的條件]
update tb_users set email_active=0 where id=2
h. shell腳本添加地區(qū)數(shù)據(jù):(是直接遠(yuǎn)程連接導(dǎo)入數(shù)據(jù))
mysql -u<用戶(hù)名> -p<密碼> -h<數(shù)據(jù)庫(kù)服務(wù)器> <數(shù)據(jù)庫(kù)名> < sql文件;
mysql -umeiduo -pmeiduo -h172.16.179.139 meiduo_mall < areas.sql;
要想上面的命令將來(lái)可以被多次執(zhí)行蔓涧,可以將上面的命令寫(xiě)入一個(gè).sh
文件中,在文件的首行必須指定一行命令:
#! /bin/bash
也許每個(gè)人電腦中bash的位置不同,根據(jù)自己電腦寫(xiě)即可笋额,mac和Ubuntu中是不同的元暴。
最后還要想執(zhí)行該shell文件,必須修改文件的可執(zhí)行權(quán)限:(這條命令作為幫助大家回憶Linux命令)
chmod a+x import_areas_data_to_db.sh
上面的chmod不需要解釋?zhuān)琣代表的是all(即全部三者:u(user該文件的所有者)兄猩、g(group該文件所有者所在的用戶(hù)組)茉盏、o(other表示其他用戶(hù)))鉴未,x代表的是執(zhí)行權(quán)限。上面的命令的意思就是『此文件給所有的用戶(hù)添加執(zhí)行權(quán)限』
+代表的是增加權(quán)限鸠姨、-代表的是撤銷(xiāo)權(quán)限铜秆、=代表的是設(shè)定權(quán)限
r代表可讀權(quán)限,就是可以通過(guò)
ls
命令查看這個(gè)目錄的內(nèi)容讶迁。w代表的是寫(xiě)入權(quán)限连茧,就是可以通過(guò)
touch
等命令在該目錄下創(chuàng)建新文件。x代表的是執(zhí)行權(quán)限巍糯,就是可以通過(guò)
cd
命令進(jìn)入這個(gè)目錄等梅屉。
4.關(guān)聯(lián)對(duì)象的嵌套序列化
4.1PrimaryKeyRelatedField
將關(guān)聯(lián)對(duì)象序列化為關(guān)聯(lián)對(duì)象的主鍵。
subs = PrimaryKeyRelatedField(label='下級(jí)地區(qū)',read_only=True)
或者:
subs = PrimaryKeyRelatedField(label='下級(jí)地區(qū)',queryset=Area.objects.all())
包含read_only=True參數(shù)的時(shí)候鳞贷,該字段僅僅用在序列化坯汤。
包含queryset參數(shù)的時(shí)候,將被用在反序列化時(shí)參數(shù)校驗(yàn)搀愧。
4.2使用關(guān)聯(lián)對(duì)象的序列化器類(lèi)
采用指定的序列化器將關(guān)聯(lián)對(duì)象進(jìn)行序列化
subs = AreaSerializer(label='下級(jí)地區(qū)',many=True)
4.3StringRelatedField
將關(guān)聯(lián)對(duì)象序列化為關(guān)聯(lián)對(duì)象的字符串表示方式惰聂,(即關(guān)聯(lián)對(duì)象模型類(lèi)_str_方法的返回值)
subs = serializers.StringRelatedField(label='下級(jí)地區(qū)')
說(shuō)明
我們?cè)谧蛱斓奈恼轮胁樵?xún)指定地區(qū)的時(shí)候,接口設(shè)計(jì)中響應(yīng)數(shù)據(jù)如下:
{
"id":"地區(qū)id",
"name":"地區(qū)名稱(chēng)",
"subs":[
{
"id":"下級(jí)地區(qū)",
"name":"下級(jí)地區(qū)名稱(chēng)"
}
]
}
根據(jù)上面可知咱筛,我們只需要將數(shù)據(jù)序列化為id和name搓幌,那么我們使用指定的序列化器類(lèi)序列化即可。
5.DRF框架
5.1web開(kāi)發(fā)兩種模式
前后端不分離:前端看到的效果是由后端進(jìn)行控制迅箩,由后端進(jìn)行模板渲染溉愁,給客戶(hù)端返回渲染之后完整的頁(yè)面內(nèi)容。
前后端分離:后端只返回前端所需的數(shù)據(jù)饲趋,至于數(shù)據(jù)怎么顯示拐揭,由前端自己控制。
5.2Restful API接口設(shè)計(jì)風(fēng)格
關(guān)鍵點(diǎn):
a.url地址盡量使用名詞奕塑,不要使用動(dòng)詞堂污;
b.請(qǐng)求url地址采用不同的請(qǐng)求方式執(zhí)行不同的操作;(POST新增/GET獲取/PUT修改/DELETE刪除)
c.過(guò)濾參數(shù)可以放在查詢(xún)字符串中龄砰;
d.響應(yīng)數(shù)據(jù)返回&響應(yīng)狀態(tài)碼盟猖;(200獲取或修改成功/201新增成功/204刪除成功/404資源不存在/400客戶(hù)端請(qǐng)求有誤/500服務(wù)器錯(cuò)誤)
e.響應(yīng)數(shù)據(jù)格式JSON。
5.3序列化&反序列化
下面從我們最近推文的項(xiàng)目來(lái)簡(jiǎn)單的理解兩個(gè)概念换棚。
序列化:將模型對(duì)象轉(zhuǎn)換為字典或者json數(shù)據(jù)的過(guò)程式镐。
反序列化:將前端傳遞的數(shù)據(jù)保存到模型對(duì)象中的過(guò)程。
5.4序列化器Serializer
5.4.1功能
進(jìn)行數(shù)據(jù)的序列化和反序列化固蚤。
5.4.2序列化器定義
繼承自serializers.Serializer
(重點(diǎn)掌握)娘汞,里面的字段需要自己定義。
class 序列化器類(lèi)名(serializers.Serializer):
# 字段名 = serializer.字段類(lèi)型(選項(xiàng)參數(shù))
如果我們想要使用序列化器對(duì)應(yīng)的是Django的模型類(lèi)颇蜡,那么可以繼承自serializers.ModelSerializer
价说,它會(huì)依據(jù)模型類(lèi)的字段自動(dòng)生成序列化器類(lèi)的字段辆亏,而且已經(jīng)實(shí)現(xiàn)了create和update的代碼。
在使用ModelSerializer的時(shí)候鳖目,可以使用model來(lái)指定模型類(lèi)扮叨,使用fields來(lái)指定具體生成的字段,使用exclude可以明確排除掉哪些字段领迈,使用read_only_fields來(lái)指明只讀字段彻磁,即僅用于序列化輸出的字段。我們還可以使用extra_kwargs參數(shù)為
ModelSerializer
添加或修改原有的選項(xiàng)參數(shù)狸捅。
序列化對(duì)象的創(chuàng)建:
序列化器類(lèi)(instance=<實(shí)例對(duì)象>, data=<數(shù)據(jù)>, **kwargs)
如果是想將對(duì)象序列化衷蜓,那么將其賦值給instance;
如果是數(shù)據(jù)校驗(yàn)尘喝,那么將數(shù)據(jù)賦值給data磁浇。
5.4.3序列化功能
將實(shí)例對(duì)象轉(zhuǎn)換為字典數(shù)據(jù):
a.序列化單個(gè)對(duì)象。
b.序列化多個(gè)對(duì)象朽褪。(其實(shí)就是在序列化單個(gè)對(duì)象的基礎(chǔ)上多加了一個(gè)參數(shù)many=True)
c.關(guān)聯(lián)對(duì)象的嵌套序列化置吓。(詳情見(jiàn)本文標(biāo)題4)
json.dumps()是將字典轉(zhuǎn)換成json字符串
json.loads()是將json字符串轉(zhuǎn)換成字典數(shù)據(jù)
5.4.4反序列化功能
1.數(shù)據(jù)校驗(yàn)
我們可以調(diào)用is_valid()
來(lái)進(jìn)行數(shù)據(jù)的校驗(yàn),我們還可以補(bǔ)充額外的驗(yàn)證:
a.先寫(xiě)一個(gè)函數(shù)(如about_django)封裝補(bǔ)充驗(yàn)證的功能缔赠,然后在字段中添加validators
參數(shù)衍锚,如下:
btitle = serializers.CharField(...,validators=[about_django])
b.在序列化器中定義一個(gè)方法validate_<field_name>
,來(lái)對(duì)<field_name>
字段進(jìn)行驗(yàn)證嗤堰。
def validate_btitle(self, value):
...
return value
c.在序列化器中定義validate
方法進(jìn)行補(bǔ)充驗(yàn)證(結(jié)合多個(gè)字段內(nèi)容驗(yàn)證)
def validate(self, attrs):
# 此處的attrs是一個(gè)字典類(lèi)型的數(shù)據(jù)戴质,創(chuàng)建序列化器對(duì)象的時(shí)候,傳入的data數(shù)據(jù)
...
return attrs
2.數(shù)據(jù)保存(新增&更新)
在創(chuàng)建序列化對(duì)象的時(shí)候如果只是傳入了data參數(shù)踢匣,那么就會(huì)調(diào)用create方法進(jìn)行數(shù)據(jù)保存告匠;如果還傳入了instance對(duì)象,那么就會(huì)調(diào)用update方法進(jìn)行數(shù)據(jù)的更新操作符糊。
注意:校驗(yàn)通過(guò)之后凫海,要調(diào)用
serializer.save()
進(jìn)行數(shù)據(jù)的保存呛凶。
5.5視圖類(lèi)
5.5.1功能
1.使用序列化器(數(shù)據(jù)校驗(yàn)男娄,數(shù)據(jù)保存,數(shù)據(jù)的序列化)漾稀。
2.進(jìn)行數(shù)據(jù)庫(kù)的相關(guān)查詢(xún)模闲。
5.5.2視圖基類(lèi)
5.5.2.1APIView
是View類(lèi)的子類(lèi),在View類(lèi)的基礎(chǔ)上添加了一些額外的功能崭捍。
功能:
1.視圖中request對(duì)象不再是Django中原始的HttpRequest類(lèi)的對(duì)象尸折,而是DRF框架封裝的Request類(lèi)的對(duì)象。
request.data保存的是解析之后的請(qǐng)求體的數(shù)據(jù)殷蛇,并且已經(jīng)解析成了字典或類(lèi)字典实夹,相當(dāng)于包含Django原始request對(duì)象中的request.body/request.POST/request.FILES
request.query_params保存解析之后的查詢(xún)字符串的數(shù)據(jù)橄浓,并且已經(jīng)解析成了字典或類(lèi)字典,相當(dāng)Django原始request對(duì)象中的request.GET
2.響應(yīng)時(shí)可以統(tǒng)一返回Response類(lèi)的對(duì)象亮航。
Response類(lèi)的對(duì)象:傳入原始的響應(yīng)數(shù)據(jù)荸实,會(huì)自動(dòng)根據(jù)客戶(hù)的請(qǐng)求頭中
Accept
將響應(yīng)數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的格式進(jìn)行返回,默認(rèn)是json缴淋,僅支持json和html
3.異常處理:如果視圖中拋出了未處理異常准给,DRF框架會(huì)自動(dòng)對(duì)異常進(jìn)行處理,并且會(huì)把處理之后的錯(cuò)誤信息返回給客戶(hù)端重抖。
4.高級(jí)功能:認(rèn)證露氮、權(quán)限、限流
5.5.2.2GenericAPIView
是APIView的子類(lèi)钟沛,在APIView的基礎(chǔ)上添加操作序列化器和數(shù)據(jù)庫(kù)查詢(xún)的方法畔规。
操作序列化器:
屬性:
serializer_class
(指定視圖所使用的序列化器類(lèi))
方法:
get_serializer_class
返回視圖所使用的序列化器類(lèi)
get_serializer
創(chuàng)建視圖所使用的序列化器類(lèi)對(duì)象。
數(shù)據(jù)庫(kù)查詢(xún)
屬性:
queryset
(指定視圖所使用的查詢(xún)集)
方法:
get_queryset
返回視圖所使用的查詢(xún)集
get_object
從視圖所使用的查詢(xún)集中查詢(xún)指定的對(duì)象恨统,默認(rèn)根據(jù)pk進(jìn)行查詢(xún)油讯。
其他功能
過(guò)濾、分類(lèi)
通常GenericAPIView配合Mixin擴(kuò)展類(lèi)進(jìn)行使用
5.5.2.3Mixin擴(kuò)展類(lèi)
DRF框架提供了5個(gè)擴(kuò)展類(lèi)延欠,封裝了通用增刪改查的流程陌兑。
ListModelMixin
提供了一個(gè)list方法,封裝了獲取一組數(shù)據(jù)的通用流程由捎。
CreateModelMixin
提供了一個(gè)create方法兔综,封裝了新增一條數(shù)據(jù)的通用流程。
RetrieveModelMixin
提供了一個(gè)retrieve方法狞玛,封裝了獲取指定數(shù)據(jù)的通用流程软驰。
UpdateModelMixin
提供了一個(gè)update方法,封裝了更新指定數(shù)據(jù)的通用流程心肪。
DestroyModelMixin
提供了一個(gè)destroy方法锭亏,封裝了刪除指定數(shù)據(jù)的通用流程。
為了方便我們開(kāi)發(fā)RestAPI硬鞍,DRF框架除了提供APIView和GenericAPIView視圖類(lèi)之外慧瘤,還提供了一些子類(lèi)視圖類(lèi),這些子類(lèi)視圖類(lèi)同時(shí)繼承了GenericAPIView和對(duì)應(yīng)的Mixin擴(kuò)展類(lèi)固该,并且提供了對(duì)應(yīng)的請(qǐng)求方法锅减。
5.6視圖集
5.6.1概念
將操作同一組資源的處理方法(API接口)放在同一個(gè)類(lèi)中
5.6.2注意點(diǎn)
1.視圖集中的處理方法不再以請(qǐng)求方法命名,而是以對(duì)應(yīng)的操作(action)名稱(chēng)命名:list/create/update/retrieve/destroy
2.在進(jìn)行url配置的時(shí)候伐坏,要指明請(qǐng)求地址的請(qǐng)求方式和視圖集中處理函數(shù)之間的對(duì)應(yīng)關(guān)系怔匣。
url(r'^books/$',views.BookInfoViewSet.as_view({
'get':'list',
'post':'create'
}))
5.6.3視圖集父類(lèi)
ViewSet
最基礎(chǔ)的父類(lèi),我們一般不使用
GenericViewSet
繼承自ViewSetMixin和GenericAPIView桦沉,可以配合Mixin擴(kuò)展類(lèi)提供對(duì)應(yīng)的處理方法每瞒。
ModelViewSet
繼承自GenericViewSet和5個(gè)對(duì)應(yīng)Mixin擴(kuò)展類(lèi)金闽。如果視圖集中一次性想要提供5個(gè)接口的時(shí)候,我們可以繼承此父類(lèi)剿骨。
ReadonlyModelViewSet
繼承自GenericViewSet和ListModelMixin, RetrieveModelMixin呐矾。如果視圖集中只想提供list和retrieve接口的時(shí)候,可以繼承此父類(lèi)懦砂。
5.6.4視圖集中添加額外的處理方法
1.直接在視圖集定義額外的處理方法即可
2.在進(jìn)行url配置的時(shí)候也要指定請(qǐng)求地址請(qǐng)求方式和處理函數(shù)之間的對(duì)應(yīng)的關(guān)系蜒犯。
5.6.5視圖集對(duì)象的action屬性
視圖集對(duì)象的action屬性是一個(gè)字符串,我們可以根據(jù)action獲取所要執(zhí)行的是哪一種操作荞膘。
使用場(chǎng)景:
根據(jù)不同的操作返回不同的序列化器類(lèi)和不同的查詢(xún)集罚随,重寫(xiě)get_serializer_class
和get_queryset
方法。
def get_serializer_class(self):
if self.action == 'list':
# 返回list操作對(duì)應(yīng)的序列化器類(lèi)
elif self.action == 'latest':
# 返回latest操作對(duì)應(yīng)的序列化器類(lèi)
else:
# 返回其他操作對(duì)應(yīng)的序列化器類(lèi)
def get_queryset(self):
if self.action == 'list':
# 返回list操作使用的查詢(xún)集
elif self.action == 'latest':
# 返回latest操作使用的查詢(xún)集
else:
# 返回其他操作所使用的查詢(xún)集
5.6.6路由Router
作用
配合視圖集進(jìn)行使用羽资,動(dòng)態(tài)生成視圖集中處理函數(shù)的url配置項(xiàng)淘菩。
使用
1.創(chuàng)建Router類(lèi)的對(duì)象
from restframe_work.routers import SimpleRouter,DefaultRouter
router = SimpleRouter()
2.注冊(cè)視圖集
router.register(prefix,viewset,base_name)
prefix 該視圖集的路由前綴
viewset 視圖集
base_name 路由名稱(chēng)的前綴
3.將生成的url配置項(xiàng)列表添加urlpatterns中
urlpatterns += router.urls
視圖集額外處理方法url配置項(xiàng)的生成
需要給對(duì)應(yīng)的方法添加action裝飾器。
@action(methods=['get'], detail=False)
def latest(self, request):
...
return Response(...)
methods 聲明該action對(duì)應(yīng)的請(qǐng)求方式屠升,列表傳遞
detail 聲明該action的路徑是否與單一資源對(duì)應(yīng)潮改。舉個(gè)例子:True表示的是xxx/<pk>/action方法名,而False表示的是xxx/action方法名
6.高級(jí)功能
6.1分頁(yè)
我們可以在配置文件中設(shè)置全局的分頁(yè)方式
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': '<全局分頁(yè)類(lèi)>',
'PAGE_SIZE': <頁(yè)容量>
}
6.1.1分頁(yè)類(lèi)
PageNumberPagination
前端訪問(wèn)網(wǎng)址的形式需要在后面跟
?page=<頁(yè)碼>
LimitOffsetPagination
前端訪問(wèn)網(wǎng)址的形式需要在后面跟
?offset=<偏移量>&limit=<數(shù)據(jù)條數(shù)>
6.1.2自定義分頁(yè)類(lèi)
class StandardResultPagination(PageNumberPagination):
# 指定頁(yè)容量
page_size = 3
# 指定獲取分頁(yè)數(shù)據(jù)時(shí)腹暖,傳遞的也容量參數(shù)名稱(chēng)
page_size_query_param = 'page_size'
# 指定最大頁(yè)容量
max_page_size = 5
前端訪問(wèn)網(wǎng)址的形式需要在后面跟
?page=<頁(yè)碼>&page_size=<頁(yè)容量>
視圖關(guān)閉分頁(yè)pagination_class = None
6.2異常處理
可以設(shè)置DRF框架的默認(rèn)異常處理汇在,也可以自定義異常處理函數(shù)。
def exception_handler(exc, context):
# 先調(diào)用DRF框架的默認(rèn)異常處理函數(shù)
response = drf_exception_handler(exc, context)
if response is None:
view = context['view']
# 補(bǔ)充數(shù)據(jù)庫(kù)的異常處理
if isinstance(exc, DatabaseError):
print('[%s]: %s' % (view, type(exc)))
response = Response({'detail': '服務(wù)器內(nèi)部錯(cuò)誤'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
return response
然后需要在配置文件中聲明自定義的異常處理脏答。
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'booktest.utils.exceptions.exception_handler'
}
6.3其他
認(rèn)證:可以進(jìn)行DRF框架默認(rèn)全局認(rèn)證方案設(shè)置糕殉,也可以對(duì)其進(jìn)行修改,還可以指定某個(gè)視圖的認(rèn)證方案殖告。
權(quán)限:區(qū)分的是認(rèn)證與未認(rèn)證的用戶(hù)阿蝶。可以進(jìn)行DRF框架默認(rèn)全局權(quán)限設(shè)置黄绩,也可對(duì)其進(jìn)行修改羡洁,還可以指定某個(gè)視圖的權(quán)限控制設(shè)置,甚至可以自定義權(quán)限控制類(lèi)爽丹。權(quán)限和認(rèn)證通常是一起使用的筑煮。
限流:注意,是對(duì)用戶(hù)訪問(wèn)API接口頻次進(jìn)行限制习劫。我們既可以針對(duì)匿名用戶(hù)和認(rèn)證用戶(hù)進(jìn)行統(tǒng)一限流設(shè)置咆瘟,也可以分開(kāi)進(jìn)行限流設(shè)置。
過(guò)濾:需要先安裝django-filter并進(jìn)行注冊(cè)設(shè)置诽里,再在視圖中通過(guò)filter_fields
設(shè)置過(guò)濾字段。
排序:設(shè)置filter_backends并通過(guò)ordering_fields
設(shè)置排序字段飞蛹。
自動(dòng)生成接口文檔:生成的接口文檔并不全面谤狡,強(qiáng)烈建議灸眼,自己寫(xiě)接口文檔。
優(yōu)質(zhì)文章推薦:
Flask框架重點(diǎn)知識(shí)總結(jié)回顧
項(xiàng)目重點(diǎn)知識(shí)點(diǎn)詳解
團(tuán)隊(duì)開(kāi)發(fā)注意事項(xiàng)