日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django serializer優化類視圖的實現示例

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

一. create優化

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

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)

可以看到,這里創建了兩個序列化器類對象,一個serializer_obj用于反序列化參數校驗(用data接受前端參數),一個ser_obj用于序列化輸出(用instance接受模型類對象),其實可以去掉ser_obj,然后調用serializer_obj的save()方法,save()方法會自動調用序列化器類對象中定義的create方法

def post(self, request): ''' post請求,新增數據 :param request: :return: ''' try: data = json.loads(request.body, encoding=’utf-8’) except Exception as e: result = {'msg': '參數有誤','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': '參數有誤'} result.update(ser_obj.errors) return JsonResponse(result, status=400) ser_obj.save() resp = {'msg': '創建成功'} resp.update(ser_obj.data) return JsonResponse(resp, status=201)

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

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驗證結果:

Django serializer優化類視圖的實現示例

寫入數據庫的數據:

Django serializer優化類視圖的實現示例

二. update優化

def put(self, request, pk): try: obj = Project.objects.get(id=pk) except Exception as e: result = {'msg': '參數有誤','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)

上面創建了兩個序列化器類的對象,可以進行合并,合并方式跟create方法有點差別,這里是給序列化器對象同時傳入data和instance,然后調用save()方法,它會自動去調用序列化器類中的update方法優化后的put方法

def put(self, request, pk): try: obj = Project.objects.get(id=pk) except Exception as e: result = {'msg': '參數有誤','code': 0 } return JsonResponse(result, status=400) request_data = request.body try: python_data = json.loads(request_data) except Exception as e: result = {'msg': '參數有誤','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’: ’參數有誤’} 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方法,我們可以進行重寫,父類方法源碼如下:

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): ''' 更新數據 :param instance: 待更新的模型類對象 :param validated_data: 校驗通過之后的數據 :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滿驗證結果:

Django serializer優化類視圖的實現示例

Django serializer優化類視圖的實現示例

友情提示:在調用序列化器類對象的save()方法時,可以以關鍵字的方式傳參,它會自動添加到create方法的validated_data中,應用場景:判斷當前項目是哪個用戶創建的

到此這篇關于Django serializer優化類視圖的實現示例的文章就介紹到這了,更多相關Django serializer優化類視圖內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情久久婷婷| 国产精品99一区二区三| 综合亚洲视频| 日韩一区二区久久| 久久午夜影视| 国产欧美一区二区三区米奇| 黑人精品一区| 日韩精品免费视频人成 | 欧美国产极品| 精品亚洲二区| 久久99久久人婷婷精品综合| 久久精品国产精品亚洲毛片| 理论片午夜视频在线观看| 欧产日产国产精品视频| 久久久久久久久久久9不雅视频| 欧美精品羞羞答答| 一区二区三区四区在线观看国产日韩| 亚洲精品一级| 国产精品嫩草影院在线看| 精品视频自拍| 亚洲v在线看| 蜜桃av一区二区在线观看| 国产精品亚洲二区| 日韩精品永久网址| 欧美在线亚洲| 亚洲永久精品唐人导航网址| 国产毛片精品久久| av中文资源在线资源免费观看| 激情综合网址| 中文字幕亚洲影视| 日本不卡高清| 国产精品久久久久77777丨| 国产精品日本一区二区不卡视频 | 亚洲一二av| 99热精品在线| 国产日韩三级| 欧洲一区二区三区精品| 国产精品探花在线观看| 亚洲一区有码| 精品视频一区二区三区四区五区 | 噜噜噜躁狠狠躁狠狠精品视频| 久久狠狠亚洲综合| 卡一精品卡二卡三网站乱码| 自拍日韩欧美| 在线 亚洲欧美在线综合一区| 91精品国产乱码久久久久久久 | 久久亚洲国产| 亚洲欧美日韩国产一区| 麻豆国产欧美日韩综合精品二区| 国产精品福利在线观看播放| 精品美女久久| 亚洲大全视频| 日韩精品91亚洲二区在线观看| 国产91在线播放精品| 91精品福利| 国产亚洲人成a在线v网站| 国产自产自拍视频在线观看| 欧美午夜不卡| 99国产精品免费视频观看| 午夜精品免费| 婷婷综合福利| 亚洲国产专区校园欧美| 国产 日韩 欧美 综合 一区| 青青草国产成人99久久| 国产精品色在线网站| 婷婷成人在线| 欧美成人精品三级网站| 国产精品人人爽人人做我的可爱| 久久亚洲精品伦理| 成人羞羞在线观看网站| 国产精品巨作av| 国产精品一区二区99| 国产成人77亚洲精品www| 国产乱码精品一区二区亚洲| 香蕉成人久久| 精品国产一级| 婷婷亚洲成人| 激情久久婷婷| 精品三区视频| 欧美日韩调教| 美国欧美日韩国产在线播放| 亚洲电影有码| 国产伦理一区| 电影亚洲精品噜噜在线观看| 国产精成人品2018| 天堂精品久久久久| 在线精品小视频| 日本国产精品| 国产一区二区三区国产精品| 日韩欧美中文字幕在线视频| 亚洲午夜在线| 成人久久一区| 亚洲永久av| 精品国产欧美日韩一区二区三区| 日韩在线黄色| 亚洲综合日本| 韩国精品主播一区二区在线观看 | 久久精品72免费观看| 国产精品毛片久久久| 国产精品日韩久久久| 亚洲一级黄色| 欧美日韩一二三四| 国产一区二区三区精品在线观看| 国产另类在线| 日本h片久久| 免费黄网站欧美| 伊人精品在线| 国产精品97| 色老板在线视频一区二区| 色婷婷色综合| 色综合狠狠操| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产日产一区| 四虎精品永久免费| 综合激情五月婷婷| 噜噜噜躁狠狠躁狠狠精品视频 | 国产午夜一区| 国产亚洲欧美日韩在线观看一区二区 | 日韩亚洲精品在线观看| 亚洲人成亚洲精品| 综合激情视频| 日本欧美一区| 国产亚洲电影| 国产日韩中文在线中文字幕 | 久久婷婷久久| 久久免费大视频| 在线一区电影| 蜜臀久久99精品久久久久宅男 | 一区二区三区午夜视频| 亚洲精一区二区三区| 婷婷成人av| 国产日韩欧美一区在线| 久久99蜜桃| 麻豆精品一区二区综合av| 精品久久视频| 亚洲1234区| 性欧美精品高清| 中文字幕成人| 国产私拍福利精品视频二区| 国产精品17p| 亚洲国产福利| 亚洲天堂黄色| 一本一道久久a久久| 国产午夜久久av| 欧美丰满日韩| 亚洲欧洲午夜| 日本成人中文字幕| 久久精品国产一区二区| 大香伊人久久精品一区二区| 欧美日韩免费看片| 亚洲激情不卡| 日韩av不卡在线观看| 精品九九在线| 免费毛片在线不卡| 亚州av日韩av| 国产一区二区三区不卡视频网站| 日韩高清中文字幕一区二区| 影院欧美亚洲| 国产精一区二区| 日韩av福利| 首页欧美精品中文字幕| 国产精品mm| 欧美99久久| 丝袜a∨在线一区二区三区不卡| 黄色在线网站噜噜噜| 麻豆国产欧美一区二区三区| 91麻豆精品激情在线观看最新| 国产精品日本一区二区三区在线| 久久亚洲专区| 中文在线资源| 国产一区二区精品福利地址| 日韩高清成人在线| 中文字幕中文字幕精品| 国内精品99| a国产在线视频| 日韩区欧美区| 91嫩草亚洲精品| 爽好久久久欧美精品| 精品国产亚洲日本| 性欧美69xoxoxoxo| 欧美精品97| 久热精品在线| 高潮久久久久久久久久久久久久| 亚洲免费播放| 老色鬼精品视频在线观看播放| 亚洲精品在线观看91| 免费亚洲婷婷| 视频一区二区中文字幕| 精品久久久中文字幕| 久久av在线| 日韩伦理一区| 97精品久久| 黄色成人91| 日韩精品第一区| 青青草国产成人99久久| 国产91精品对白在线播放| 国产精品成人自拍| 亚洲精品字幕| 亚洲高清激情| 成人午夜亚洲|