baseresponse响应类_内部类、响应类Response、序列化基类、反序列化、全局局部钩子...
一、內(nèi)部類
1、概念:將類定義在一個類的內(nèi)部,被定義的類就是內(nèi)部類
2、特點(diǎn):內(nèi)部類及內(nèi)部類的所以名稱空間,可以直接被外部類訪問的
3、 應(yīng)用:通過內(nèi)部類的名稱空間,給外部類額外拓展一些特殊的屬性(配置),典型的Meta內(nèi)部類 - 配置類
class Book(model.Model):
class Meta:
db_model = "owen_book"? ? ? ? ? ? ? ? # 配置自定義表名
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = "Book"? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 配置序列化類綁定的Model表
結(jié)果:
列子:特點(diǎn):內(nèi)部類及內(nèi)部類的所以名稱空間,可以直接被外部類訪問的
二、DRF響應(yīng)類:Response
1、源碼:
def __init__(self, data=None, status=None, template_name=None, headers=None, exception=False, content_type=None):
pass
2、源碼中的參數(shù):
data:響應(yīng)的數(shù)據(jù) - 空、字符串、數(shù)字、列表、字段、布爾
status:網(wǎng)絡(luò)狀態(tài)碼
template_name:drf說自己也可以支持前后臺不分離返回頁面,但是不能和data共存(不會涉及)
headers:響應(yīng)頭(不用刻意去管)
exception:是否是異常響應(yīng)(如果是異常響應(yīng),可以賦值True,沒什么用)
content_type:響應(yīng)的結(jié)果類型(如果是響應(yīng)data,默認(rèn)就是application/json,所有不用管)
3、常見使用
return Response(
data={
'status': 0,
'msg': 'ok',
'result': '正常數(shù)據(jù)'
}
)
return Response(
data={
'status': 1,
'msg': '客戶端錯誤提示',
},
status=status.HTTP_400_BAD_REQUEST,
exception=True
)
響應(yīng)類源碼:最重要的是data和status
例子:設(shè)置網(wǎng)絡(luò)狀態(tài)碼
結(jié)果:
三、序列化基類(BaseSerializer)
1、源碼:
def __init__(self, instance=None, data=empty, **kwargs):
pass
2、源碼中的參數(shù):
instance:是要被賦值對象的 - 對象類型數(shù)據(jù)賦值給instance
data:是要被賦值數(shù)據(jù)的 - 請求來的數(shù)據(jù)賦值給data
kwargs:內(nèi)部有三個屬性:many、partial、context
many:操作的對象或數(shù)據(jù),是單個的還是多個的
partial:在修改需求時使用,可以將所有校驗(yàn)字段required校驗(yàn)規(guī)則設(shè)置為False
context:用于視圖類和序列化類直接傳參使用
圖片:
3、 常見使用
# 單查接口
UserModelSerializer(instance=user_obj)
# 群查接口
UserModelSerializer(instance=user_query, many=True)
# 增接口
UserModelSerializer(data=request.data)
# 整體改接口
UserModelSerializer(instance=user_obj, data=request.data)
# 局部改接口
UserModelSerializer(instance=user_obj, data=request.data, partial=True)
# 刪接口,用不到序列化類
四、反序列化
1、views.py文件中
classUserAPIView(APIView):def post(self, request, *args, **kwargs):#單增
#1)將前臺請求的數(shù)據(jù)交給序列化類處理
#2)序列化類執(zhí)行校驗(yàn)方法,對前臺提交的所有數(shù)據(jù)進(jìn)行數(shù)據(jù)校驗(yàn):校驗(yàn)失敗就是異常返回,成功才能繼續(xù)
#3)序列化組件完成數(shù)據(jù)入庫操作,得到入庫對象
#4)響應(yīng)結(jié)果給前臺
serializer = serializers.UserModelSerializer(data=request.data)ifserializer.is_valid():#校驗(yàn)成功 => 入庫 => 正常響應(yīng)
obj =serializer.save()returnResponse({'status': 0,'msg': 'ok','result': '新增的那個對象'}, status=status.HTTP_201_CREATED)else:#校驗(yàn)失敗 => 異常響應(yīng)
returnResponse({'status': 1,'msg': serializer.errors,
}, status=status.HTTP_400_BAD_REQUEST)
2、is_valid() 源碼:
斷言(assert): 其實(shí)就是等于? if...raise error
3、.save() 源碼:
4、提交post請求:
錯誤原因:
5、serializer 反序列化 分析:
第一波分析:
第二波分析
第三波 自定義反序列化字段
01、自定義只寫字段,在serializer類中聲明,必須手動明確write_only
02、自定義只讀字段,在model類中用@property聲明,默認(rèn)就是read_only
6、全部、局部鉤子(用來篩選條件的)
總結(jié)
以上是生活随笔為你收集整理的baseresponse响应类_内部类、响应类Response、序列化基类、反序列化、全局局部钩子...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国产69-II型坦克的出口记
- 下一篇: word把选择答案弄到题目里_老师们看过