成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

瀏覽:4日期:2024-09-25 08:40:32

一. create優(yōu)化

在serializer序列化中,我們通過創(chuàng)建序列化器對象的方式地簡化了視圖函數(shù)的代碼,前端傳入的數(shù)據(jù)通過反序列化操作進(jìn)行了各種數(shù)據(jù)校驗(yàn),代碼如下:

from django.http import JsonResponsefrom django.views import Viewimport jsonfrom .models import Projectfrom .serializers import ProjectsSerializerclass ProjectsPage(View): ’’’ 類視圖 ’’’ def post(self, request): input_data = json.loads(request.body) serializer_obj = ProjectsSerializer(data=input_data) if not serializer_obj.is_valid(): return JsonResponse({'code': 1, 'res': 'error', 'msg': serializer_obj.errors}) obj = Project.objects.create(**input_data) ser_obj = ProjectsSerializer(instance=obj) return JsonResponse(ser_obj.data, status=201)

可以看到,這里創(chuàng)建了兩個(gè)序列化器類對象,一個(gè)serializer_obj用于反序列化參數(shù)校驗(yàn)(用data接受前端參數(shù)),一個(gè)ser_obj用于序列化輸出(用instance接受模型類對象),其實(shí)可以去掉ser_obj,然后調(diào)用serializer_obj的save()方法,save()方法會(huì)自動(dòng)調(diào)用序列化器類對象中定義的create方法

def post(self, request): ''' post請求,新增數(shù)據(jù) :param request: :return: ''' try: data = json.loads(request.body, encoding=’utf-8’) except Exception as e: result = {'msg': '參數(shù)有誤','code': 0 } return JsonResponse(result, status=400) ser_obj = ProjectsSerializer(data=data) try: ser_obj.is_valid(raise_exception=True) except Exception as e: result = {'msg': '參數(shù)有誤'} result.update(ser_obj.errors) return JsonResponse(result, status=400) ser_obj.save() resp = {'msg': '創(chuàng)建成功'} resp.update(ser_obj.data) return JsonResponse(resp, status=201)

序列化器類中的create方法需要提前定義,該方法是父類的create方法,我們可以進(jìn)行重寫,父類方法源碼如下:

def create(self, validated_data): return [ self.child.create(attrs) for attrs in validated_data ]

重寫父類的create方法,并返回模型類對象

def create(self, validated_data): obj = Project.objects.create(**validated_data) return obj

使用postman驗(yàn)證結(jié)果:

Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

寫入數(shù)據(jù)庫的數(shù)據(jù):

Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

二. update優(yōu)化

def put(self, request, pk): try: obj = Project.objects.get(id=pk) except Exception as e: result = {'msg': '參數(shù)有誤','code': 0 } return JsonResponse(result, status=400) update_data = json.loads(request.body) serializer_obj = ProjectsSerializer(data=update_data) if not serializer_obj.is_valid(): return JsonResponse({'code': 1, 'res': 'error', 'msg': serializer_obj.errors}) obj.name = serializer_obj.validated_data.get(’name’) or obj.name obj.leader = serializer_obj.validated_data.get(’leader’) or obj.leader obj.desc = serializer_obj.validated_data.get(’desc’) or obj.programmer obj.tester = serializer_obj.validated_data.get(’tester’) or obj.tester obj.save() ser_obj = ProjectsSerializer(instance=obj) return JsonResponse(ser_obj.data, status=201)

上面創(chuàng)建了兩個(gè)序列化器類的對象,可以進(jìn)行合并,合并方式跟create方法有點(diǎn)差別,這里是給序列化器對象同時(shí)傳入data和instance,然后調(diào)用save()方法,它會(huì)自動(dòng)去調(diào)用序列化器類中的update方法優(yōu)化后的put方法

def put(self, request, pk): try: obj = Project.objects.get(id=pk) except Exception as e: result = {'msg': '參數(shù)有誤','code': 0 } return JsonResponse(result, status=400) request_data = request.body try: python_data = json.loads(request_data) except Exception as e: result = {'msg': '參數(shù)有誤','code': 0 } return JsonResponse(result, status=400) serializer_obj = ProjectsSerializer(instance=obj, data=python_data) try: serializer_obj.is_valid(raise_exception=True) except Exception as e: resp = {’msg’: ’參數(shù)有誤’} resp.update(serializer_obj.errors) return JsonResponse(resp, status=400) serializer_obj.save() resp = {’msg’: ’修改成功’} resp.update(serializer_obj.data) return JsonResponse(resp, status=201)

序列化器類中的update方法需要提前定義,該方法是父類的update方法,我們可以進(jìn)行重寫,父類方法源碼如下:

def update(self, instance, validated_data): raise_errors_on_nested_writes(’update’, self, validated_data) info = model_meta.get_field_info(instance) m2m_fields = [] for attr, value in validated_data.items(): if attr in info.relations and info.relations[attr].to_many:m2m_fields.append((attr, value)) else:setattr(instance, attr, value) instance.save() for attr, value in m2m_fields: field = getattr(instance, attr) field.set(value) return instance

在序列化器類中重寫父類的updata方法,并返回模型類對象

def update(self, instance, validated_data): ''' 更新數(shù)據(jù) :param instance: 待更新的模型類對象 :param validated_data: 校驗(yàn)通過之后的數(shù)據(jù) :return: 模型類對象 ''' instance.name = validated_data.get(’name’) or instance.name instance.leader = validated_data.get(’leader’) or instance.leader instance.tester = validated_data.get(’tester’) or instance.tester instance.desc = validated_data.get(’desc’) or instance.desc instance.save() return instance

使用post滿驗(yàn)證結(jié)果:

Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例

友情提示:在調(diào)用序列化器類對象的save()方法時(shí),可以以關(guān)鍵字的方式傳參,它會(huì)自動(dòng)添加到create方法的validated_data中,應(yīng)用場景:判斷當(dāng)前項(xiàng)目是哪個(gè)用戶創(chuàng)建的

到此這篇關(guān)于Django serializer優(yōu)化類視圖的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Django serializer優(yōu)化類視圖內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品成人在线观看 | 亚洲一区三区视频在线观看| 91黄视频在线| 一区二区国产视频| 国产欧美一级| 亚洲激情在线激情| 亚洲激情一区二区三区| 国产午夜精品福利| 国产成人av一区二区三区在线 | 欧美+日本+国产+在线a∨观看| 精品国精品自拍自在线| 国产成人综合网站| 日韩欧美久久久| 国产精品18久久久久久久久| 8x8x8国产精品| 国产精品资源网| 这里是久久伊人| 狠狠色丁香久久婷婷综| 欧美理论片在线| 国产一区福利在线| 欧美一区午夜视频在线观看| 国产大片一区二区| 精品日韩一区二区| 成人动漫在线一区| 2020日本不卡一区二区视频| 97se亚洲国产综合在线| 国产欧美综合在线观看第十页| 欧美人成在线| 亚洲三级在线观看| 中文精品在线| 日本不卡在线视频| 欧美理论电影在线| 成人av在线网| 国产日韩欧美综合一区| 国产精品高清一区二区三区| 亚洲人成在线播放网站岛国| 亚洲一区bb| 全部av―极品视觉盛宴亚洲| 欧美日韩不卡在线| 国产.欧美.日韩| 国产日产亚洲精品系列| 在线播放精品| 五月天激情综合| 欧美浪妇xxxx高跟鞋交| 丰满少妇在线播放bd日韩电影| 日韩免费观看2025年上映的电影| youjizz国产精品| 国产偷国产偷亚洲高清人白洁 | 亚洲日韩欧美一区二区在线| 午夜亚洲视频| 国产一区欧美一区| 久久网这里都是精品| 一区二区在线不卡| 亚洲va欧美va人人爽午夜| 在线亚洲一区二区| 国产成人在线视频网站| 欧美精品一区二| 亚洲东热激情| 同产精品九九九| 91国偷自产一区二区三区观看| 加勒比av一区二区| 2014亚洲片线观看视频免费| 亚洲青色在线| 蜜桃av一区二区三区| 26uuu色噜噜精品一区| 国产亚洲亚洲| 韩国av一区二区三区在线观看| 精品国产污污免费网站入口| 韩日成人在线| 爽好久久久欧美精品| 欧美电视剧免费全集观看| 亚洲网址在线| 热久久久久久久| 2020国产精品自拍| 一区二区三区福利| 狠狠v欧美v日韩v亚洲ⅴ| 久久精品无码一区二区三区| 国产人成精品一区二区三| 乱一区二区av| 26uuu亚洲综合色欧美 | 精品日韩在线观看| 亚洲一区日韩在线| 成人av网址在线| 一区二区三区在线免费观看| 4hu四虎永久在线影院成人| 午夜精品久久久久99热蜜桃导演| 午夜影院在线观看欧美| 精品日韩欧美一区二区| 国产精品乱码| 东方欧美亚洲色图在线| 一区二区三区四区乱视频| 欧美一区二区三区思思人| 91久久中文| 国产白丝网站精品污在线入口| 亚洲欧美日韩成人高清在线一区| 欧美在线观看一二区| 欧美精品二区| 激情综合色播激情啊| 自拍偷在线精品自拍偷无码专区| 欧美日韩国产综合草草| 亚洲高清视频一区二区| 国产成人精品在线看| 亚洲图片自拍偷拍| 欧美大胆一级视频| 久久精品国产第一区二区三区最新章节 | 欧洲精品在线观看| 欧美.日韩.国产.一区.二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产三级久久久| 91成人在线观看喷潮| 激情六月综合| 成人性生交大片免费看中文网站| 亚洲午夜精品网| 国产三级欧美三级日产三级99| 欧洲精品视频在线观看| 亚洲福利国产| 99国产精品久久久久久久久久久| 久久精品72免费观看| 亚洲在线免费播放| 久久综合九色综合97婷婷 | 91蜜桃网址入口| 久久99国产精品成人| 亚洲色图在线播放| 精品国产欧美一区二区| 欧洲精品一区二区| 一区二区福利| 欧美成人免费在线| 国产精品99久久久久久似苏梦涵| 亚洲成a人片综合在线| 欧美国产精品专区| 日韩美女视频在线| 欧美专区日韩专区| 国产亚洲一级| 亚洲高清在线播放| 午夜精彩国产免费不卡不顿大片| 国产成人av网站| 另类中文字幕网| 亚洲一区在线观看免费| 国产精品视频麻豆| 日韩精品一区二区三区四区| 欧日韩精品视频| 亚洲一区免费| 亚洲国产激情| 欧美成熟视频| 风间由美性色一区二区三区| 精品一区二区三区在线播放 | 九九精品一区二区| 亚洲高清久久久| 久久久久国产精品麻豆| 欧美肥胖老妇做爰| 欧美日韩精品一区二区| 色94色欧美sute亚洲线路二 | 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品国产亚洲精品看不卡15| 成人aaaa免费全部观看| 黑人巨大精品欧美一区| 日韩电影在线观看一区| 亚洲国产综合色| 亚洲美女区一区| 久久久久久久精| 日韩欧美亚洲国产另类| 欧美肥妇bbw| 欧美亚一区二区| 久久亚洲高清| 国产亚洲在线| 99视频一区| 一本色道88久久加勒比精品| 亚洲黄页一区| 亚洲国产精品一区二区第四页av| 欧美特黄一区| 国一区二区在线观看| 91麻豆swag| 午夜欧美视频| 欧美性久久久| 激情视频一区二区| 亚洲一级特黄| 99视频+国产日韩欧美| 亚洲视频www| 在线一区欧美| 国产日韩欧美一区| 国产精品久久久免费| 免费精品视频| 色婷婷av一区| 欧美三级中文字幕| 日韩欧美中文一区二区| 日韩欧美的一区二区| 欧美不卡视频一区| 2020国产精品自拍| 日韩午夜av电影| 精品第一国产综合精品aⅴ| 国产午夜精品福利| 国产精品天天看| 亚洲免费伊人电影| 一区二区三区精品在线观看| 樱桃视频在线观看一区| 一区二区三区四区在线播放 | 91麻豆免费视频| 欧美日本免费| 日韩香蕉视频| 一本大道久久a久久综合|