摘要:序列化輸出定義序列化器字段的作用補(bǔ)充為列表,關(guān)系屬性字段的三種方式獲取序列化后的數(shù)據(jù),,反序列化輸入驗(yàn)證驗(yàn)證的調(diào)用接收數(shù)據(jù)繼承獲取查詢(xún)字符串中的某個(gè)參數(shù)值獲取查詢(xún)字符串中的所有值返回一個(gè)字典獲取請(qǐng)求體中的參數(shù)包括表單創(chuàng)建序列化器對(duì)象類(lèi)字典進(jìn)
1.序列化輸出:
1.定義序列化器字段的作用 1. 2. 補(bǔ)充:read_only,write_only 2.`JsonResponse({book_dict})`
JsonResponse({"bookinfo":book_dict_list}) # book_dict_list 為列表
JsonResponse(book_dict_list,safe = False) 3.關(guān)系屬性字段的三種方式 1.hbook = PrimaryKeyRelatedField(read_only = True) 2.hbook = StringRealtedField(read_only=True) 3.hbook = bookinfoSerializer(read_only = True) 4.heroinfo_set = PrimaryKeyRelatedField(read_only = True,many = True) 5.heroinfo_set = StringRealtedField(read_only=True,many = True) 6.heroinfo_set = bookinfoSerializer(read_only = True,many = True) 4.獲取序列化后的數(shù)據(jù):serializer.data ========> {} or [{},{},{}]
2.反序列化輸入:
1.驗(yàn)證 2.驗(yàn)證的調(diào)用 1.接收數(shù)據(jù)(繼承APIView) next = request.query_params.get("next") :獲取查詢(xún)字符串中的某個(gè)參數(shù)值 data_dict = request.query_params.dict():獲取查詢(xún)字符串中的所有值,返回一個(gè)字典 data=request.data:獲取請(qǐng)求體中的參數(shù)(包括表單,json) 2.創(chuàng)建序列化器對(duì)象serializer = 類(lèi)(data = 字典) 3.serializer.is_valid()=======>進(jìn)行驗(yàn)證===>True/False return JsonResponse(serializer.errors) 4.serializer.errors===========>字典,異常信息(定義序列化器里面自定義的異常信息) serializer.validated_data 3.保存 4.保存的調(diào)用 1.serializer=序列化器類(lèi)型(data=***)===>默認(rèn)選擇create()方法 2.serializer=序列化器類(lèi)型(模型類(lèi)對(duì)象,data=***,[partial = True])====>默認(rèn)選擇update()方法 3.book = serializer.save() # 返回一個(gè)對(duì)象 5.序列化輸出
3.APIView=============================================>繼承自View
1.由來(lái) : 發(fā)現(xiàn)View中每個(gè)方法里面都需要使用json轉(zhuǎn)換,可以進(jìn)一步封裝 2.里面的方法 get post put patch delete 3.response和resquest 1.request.query_params.get()=======>獲取查詢(xún)字符串中的值,類(lèi)型為字典 request.data.get()======>獲取請(qǐng)求報(bào)文體中的數(shù)據(jù),類(lèi)型為字典 2.Response() {} or [{},{},{},{}] 不需要safe = False 4.繼承自View 1.使用Resquest 2.使用Response 3.更好的異常處理 4.在dispatch()前,進(jìn)行了身份認(rèn)證,權(quán)限判斷,流量控制 3306 6379
4.GenericAPIView=================================>繼承自APIView
1.由來(lái): 發(fā)現(xiàn)繼承自View的APIView,雖然已經(jīng)減少了很多代碼的重復(fù),但是發(fā)現(xiàn)每個(gè)方法中只有 查詢(xún)的模型類(lèi)對(duì)象,和要操作的序列化器名不一樣,可以進(jìn)一步封裝 2.GenericAPIView+5個(gè)ModelMixin from rest_framework.mixin import * from rest_framework.generics import GenericAPIView 查詢(xún)多個(gè)(get)-------------------------------->list------>ListModelMixin 創(chuàng)建(post)----------------------------------->create---->CreateModelMixin 查詢(xún)一個(gè)(接收主鍵)(get)---------------------->retrieve-->RetrieveModelMixin 修改(接收主鍵)(put)-------------------------->update---->UpdateModelMixin 刪除(接收主鍵)(delete)----------------------->destory--->DestoryModelMixin 3.新添加的屬性和方法 1.屬性: queryset serializer_class lookup_fileds------>默認(rèn)為pk,因?yàn)橛械姆椒ń邮罩麈I的參數(shù)為pk(來(lái)自?P) 2.方法: 1.get_queryset()----->獲取屬性queryset的值,可重寫(xiě) 重寫(xiě)場(chǎng)景 ----->比如說(shuō):需要修改"當(dāng)前用戶(hù)"的收貨地址--->根據(jù)用戶(hù)查詢(xún)收貨地址 原因分析 ----->1.類(lèi)創(chuàng)建的時(shí)候沒(méi)有request對(duì)象--->2.執(zhí)行g(shù)et中的list()方法才會(huì)有request 2.get_serializer_class()--->獲取屬性serializer_class的值,可重寫(xiě) 重寫(xiě)場(chǎng)景 ----->不同情境選擇不同的序列化器 3.get_serializer()-------------->獲取序列化器的對(duì)象------------>基本用不著 4.get_object()------------------>獲取根據(jù)pk查詢(xún)到的對(duì)象-------->基本用不著 4.使用方法 class HerosView(ListModelMixin,CreateModelMixin,GenericAPIView): # 自己指定查詢(xún)語(yǔ)句 queryset =HeroInfo.object.all() # 自己指定序列化器 serializer_class = HerInfoModelSerializer def get(self,request): # 查詢(xún)所有:自己指定查詢(xún)語(yǔ)句+序列化器 return self.list(request) def post(self,request): # 創(chuàng)建一個(gè):自己指定序列化器 return self.create(request)
5.組合繼承:========================>對(duì)GenericAPIView+5個(gè)ModelMixin的進(jìn)一步封裝,不需要寫(xiě)get,post,put,delete方法了
1.由來(lái): 發(fā)現(xiàn)GenericAPIView+ModelMixin的每個(gè)方法里面都是返回對(duì)應(yīng)的操作,如 return self.list(request) return self.create(request),可以進(jìn)一步封裝 HerosView list------------->ListAPIView----------------->繼承自ListModelMixin+GenericAPIView create----------->CreateAPIView--------------->繼承自CreateModelMixin+GenericAPIView list+create------>ListCreateAPIView----------->同理 HerosView retrieve--------->RetrieveAPIView update----------->UpdateAPIView destory---------->同理 retrieve+update--------------->同理 retrieve+destory-------------->同理 # update+destory-------------->無(wú) retrieve+update+destory------->同理
6.視圖集
1.由來(lái): 發(fā)現(xiàn)組合繼承(ListAPIView,ListCreateAPIView)中除了HerosView和HeroView不同以外,其他的都一樣,可以進(jìn)一步封裝 2.合并的問(wèn)題:在同一個(gè)了類(lèi)中,不允許有同名的方法 3.解決問(wèn)題:改方法的名稱(chēng) 4.新問(wèn)題:如果改了名稱(chēng),則dispatch()無(wú)法根據(jù)請(qǐng)求方法獲取方法 5.新的解決問(wèn)題: {"get":"list"},可自定義方法名了 6.字典的傳入方法:views.HeroInfoViewSet.as_view({"get":"list"}) 7.會(huì)多出一個(gè)action屬性: if self.action == "list" ---------------------------------------------------------------------------- 8.drf中默認(rèn)的設(shè)置好的方法 list create get update destory 9.drf提供的視圖集-->4個(gè)
7.總結(jié):
1.一步步封裝: APIView: 發(fā)現(xiàn)View中每個(gè)方法里面都需要使用json轉(zhuǎn)換,可以進(jìn)一步封裝發(fā)現(xiàn)View中每個(gè)方法里面都需要使用json轉(zhuǎn)換,可以進(jìn)一步封裝 GenericAPIView+5個(gè)ModelMixin: 發(fā)現(xiàn)繼承自View的APIView,雖然已經(jīng)減少了很多代碼的重復(fù),但是發(fā)現(xiàn)每個(gè)方法中只有 查詢(xún)的模型類(lèi)對(duì)象,和要操作的序列化器名不一樣,可以進(jìn)一步封裝 組合繼承: 發(fā)現(xiàn)GenericAPIView+ModelMixin的每個(gè)方法里面都是返回對(duì)應(yīng)的操作,如 return self.list(request) return self.create(request),可以進(jìn)一步封裝 視圖集: 發(fā)現(xiàn)組合繼承(ListAPIView,ListCreateAPIView)中除了HerosView和HeroView不同以外,其他的都一樣,可以進(jìn)一步封裝 2.繼承關(guān)系(---->)如下: ---->ListAPIView---->ListModelMixin+GenericAPIView | |--->CreateAPIView-->CreateModelMixin+GenericAPIView View----->APIView-----> GenericAPIView+5個(gè)ModelMixin | |.......... | | ---->一共9個(gè) 3.是視圖的選擇: APIView==========================>自己實(shí)現(xiàn),不涉及模型類(lèi)的操作 GenericAPIView+5個(gè)ModelMixin:====>增刪改查 部分操作
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42776.html
摘要:項(xiàng)目介紹本系統(tǒng)采用框架,數(shù)據(jù)層采用,數(shù)據(jù)庫(kù)使用,可以用作畢業(yè)設(shè)計(jì)課程設(shè)計(jì)等,適合選題高校宿舍宿舍員工宿舍等,下面是大概的功能,具體功能實(shí)現(xiàn)可以建議看下方的演示視頻,系統(tǒng)適合于基礎(chǔ)一般的同學(xué)使用。 項(xiàng)目介紹: 本系統(tǒng)采用SSM框架,數(shù)據(jù)層采用mybatis,數(shù)據(jù)庫(kù)使用mysql,可以用作畢業(yè)設(shè)...
摘要:項(xiàng)目編號(hào)基于實(shí)現(xiàn)學(xué)校宿舍管理系統(tǒng)主要包含學(xué)生管理宿舍管理班級(jí)管理宿舍衛(wèi)生管理訪客管理收費(fèi)管理管理員管理等功能。 項(xiàng)目編號(hào):BS-GX-010 基于SSM實(shí)現(xiàn)學(xué)校宿舍管理系統(tǒng):主要包含學(xué)生管理、宿舍管理、班級(jí)管理、宿舍衛(wèi)生管理、訪客管理、收費(fèi)管理、管理員管理等功能。并能導(dǎo)出各模塊數(shù)據(jù)到EXC...
摘要:基于的學(xué)生宿舍管理系統(tǒng)部分代碼實(shí)現(xiàn)樓棟不能為空編輯表單提交之前進(jìn)行檢查,如果,則不允許提交根據(jù)獲取值姓名不能為空電話不能為空側(cè)邊欄 基于javaweb+jsp的學(xué)生...
摘要:綜合諸多考慮與相應(yīng)調(diào)研,我們希望能夠制作出一款宿舍升降機(jī)為同學(xué)們提供更方便安全的上下床方式。摘要本設(shè)計(jì)采用開(kāi)發(fā)板作為主控,結(jié)合壓力傳感器紅外避障傳感器電機(jī)驅(qū)動(dòng)模塊實(shí)現(xiàn)了一個(gè)可以自動(dòng)升降自動(dòng)停止自動(dòng)調(diào)速的宿舍升降機(jī)模型系統(tǒng)。 (第一次寫(xiě)博客,記錄下自己大一時(shí)做的一個(gè)課設(shè),如有不妥之處,還望多...
摘要:學(xué)生宿舍管理系統(tǒng)該項(xiàng)目采用技術(shù),開(kāi)發(fā)工具,項(xiàng)目含有源碼配套開(kāi)發(fā)軟件軟件安裝教程項(xiàng)目發(fā)布教程功能介紹房間管理主要實(shí)現(xiàn)對(duì)房間信息的刪除修改相關(guān)操作學(xué)生信息管理主要實(shí)現(xiàn)對(duì)學(xué)生信息的增加刪除查詢(xún)修改等相關(guān)操作住宿管理主要實(shí)現(xiàn)對(duì)宿舍的增加刪除查詢(xún)修 《學(xué)生宿舍管理系統(tǒng)》該項(xiàng)目采用技術(shù)swing,開(kāi)發(fā)工...
閱讀 2356·2021-11-24 10:18
閱讀 3447·2021-09-22 15:35
閱讀 3393·2021-09-13 10:37
閱讀 3799·2021-09-06 15:14
閱讀 2102·2021-09-06 15:02
閱讀 2266·2021-09-02 15:11
閱讀 581·2019-08-30 15:53
閱讀 3106·2019-08-29 16:15