重點(diǎn)內(nèi)容回顧-DRF

重點(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_classget_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ì)文章推薦:

公眾號(hào)使用指南

redis操作命令總結(jié)

前端中那些讓你頭疼的英文單詞

Flask框架重點(diǎn)知識(shí)總結(jié)回顧

項(xiàng)目重點(diǎn)知識(shí)點(diǎn)詳解

難點(diǎn)理解&面試題問(wèn)答

flask框架中的一些常見(jiàn)問(wèn)題

團(tuán)隊(duì)開(kāi)發(fā)注意事項(xiàng)

淺談密碼加密

Django框架中的英文單詞

Django中數(shù)據(jù)庫(kù)的相關(guān)操作

DRF框架中的英文單詞

重點(diǎn)內(nèi)容回顧-DRF

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墓懂,一起剝皮案震驚了整個(gè)濱河市焰宣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捕仔,老刑警劉巖匕积,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異榜跌,居然都是意外死亡闪唆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)钓葫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悄蕾,“玉大人,你說(shuō)我怎么就攤上這事础浮》鳎” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵豆同,是天一觀的道長(zhǎng)番刊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)影锈,這世上最難降的妖魔是什么撵枢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮精居,結(jié)果婚禮上锄禽,老公的妹妹穿的比我還像新娘。我一直安慰自己靴姿,他們只是感情好沃但,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著佛吓,像睡著了一般宵晚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上维雇,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天淤刃,我揣著相機(jī)與錄音,去河邊找鬼吱型。 笑死逸贾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铝侵,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灼伤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咪鲜?” 一聲冷哼從身側(cè)響起狐赡,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疟丙,沒(méi)想到半個(gè)月后颖侄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡享郊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年览祖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拂蝎。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡穴墅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出温自,到底是詐尸還是另有隱情玄货,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布悼泌,位于F島的核電站松捉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馆里。R本人自食惡果不足惜隘世,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸠踪。 院中可真熱鬧丙者,春花似錦、人聲如沸营密。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)评汰。三九已至纷捞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間被去,已是汗流浹背主儡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惨缆,地道東北人糜值。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓丰捷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臀玄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓢阴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Django&DRF重點(diǎn)內(nèi)容大盤(pán)點(diǎn) 本文只是將學(xué)習(xí)過(guò)程中需要深刻記憶畅蹂,在工作中常用的一些命令或者知識(shí)點(diǎn)進(jìn)行一個(gè)羅列...
    小閆同學(xué)啊閱讀 4,258評(píng)論 0 10
  • 1. 視圖 Django REST framwork 提供的視圖的主要作用: 控制序列化器的執(zhí)行(檢驗(yàn)健无、保存、轉(zhuǎn)換...
    childhood_1013閱讀 85評(píng)論 0 0
  • 1. Web應(yīng)用模式 在開(kāi)發(fā)Web應(yīng)用中液斜,有兩種應(yīng)用模式: 前后端不分離 前后端分離 2. api接口 為了在團(tuán)隊(duì)...
    childhood_1013閱讀 169評(píng)論 0 0
  • 安裝Nginx:yum install -y nginxsystemctl start nginxsystemct...
    碧潭飄雪ikaros閱讀 697評(píng)論 0 1
  • 1. 版本 了解* 可以放在url累贤,這種是比較推薦的。它需要配套的路由少漆,一般所有的CBV都要使用臼膏,所以放在全局配...
    上帝大人閱讀 164評(píng)論 0 1