日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rest framework 序列化

發(fā)布時間:2024/1/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest framework 序列化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

serializers 序列化組件

  可以實現(xiàn)很輕松的互相轉(zhuǎn)換,最常用的組件 ,用量最大的組件

源碼位置

rest_framework.serializers

源碼中需要用到的?

?  rest_framework.serializers

# 序列化工具類必須要繼承此類class ModelSerializer(Serializer):

?

命令

  queryset/對象 -----> 序列化數(shù)據(jù)

bs=BookModelSerializers(queryset,many=True) # 對queryset 對象序列化 bs=BookModelSerializers(obj) # 對 對象序列化

?

  序列化數(shù)據(jù) -----> queryset

bs=BookModelSerializers(data=request.data) # 將序列化數(shù)據(jù) 轉(zhuǎn)換成對象

?

  數(shù)據(jù)校驗

bs.is_valid()

?

  數(shù)據(jù)提交轉(zhuǎn)換成記錄

# 不指定對象.create() 方法 bs=BookModelSerializers(data=request.data) bs.save()# 指定對象.updata() 方法 bs=BookModelSerializers(book,data=request.data) bs.save()

?

實例

序列化模塊工具類

  建立model字段的映射

  如果將所有的字段轉(zhuǎn)換,轉(zhuǎn)換一對多多對多字段的值會是關(guān)聯(lián)的主鍵值,

  如果向顯示關(guān)聯(lián)的值就需要自定義,當(dāng) __all__ 和自定義字段都有的時候,優(yōu)先使用自定義的?

  但是如果你使用了自定義的方法就需要重寫 create方法。不然是報錯無法正常的傳輸數(shù)據(jù),因為默認的create是按照主鍵值來的。

序列化的定義

from rest_framework.response import Response from rest_framework import serializers class BookModelSerializers(serializers.ModelSerializer): # 類似于 modelform 一樣的操作 class Meta:model = Bookfields = "__all__"# fields = ['publist','authors','title',] # 也可以單獨取部分字段# 默認轉(zhuǎn)換的時候普通字段沒啥問題# title = serializers.CharField # 對于普通字段直接取即可 默認是 取 str(obj.title ) # 對于一對一,一對多字段會有錯誤的顯示# publish= serializers.CharField() # 會顯示對象# publish_id = serializers.CharField() # 會顯示id ,如果沒有非要要求顯示特定字段,直接全部 __all__ 即可。# 自定義對一對多字段處理 ,注意啊:自定義字段可別寫在 Meta 里面。是類下的變量字段。publish = serializers.CharField(source="publish.pk") # 加 "source=" 取 str(obj.publish.pk )


  # 給字段的賦值一個 url 地址 ,即 Hyperlinked publish=serializers.HyperlinkedIdentityField(view_name="detailpublish", # 反向解析的 別名 lookup_field="publish_id", # 找出來當(dāng)前的 id 值 lookup_url_kwarg="pk" # 將lookup_field 的值賦值給 url 中 )
  # 如果使用了超鏈接,url 的格式如下, 必須需要有 反向名字,分組命名。
  #
url(r'publish/(?P<pk>\d+)', views.BookDetailView.as_view(),name="detailpublish"),

  # 如果使用了超鏈接,序列化示例的時候必須要加 context={"request":request}參數(shù)。
  # bs=BookModelSerializers(book_list,many=True,context={'request': request}) # authors = serializers.SerializerMethodField(source='authors.all') # 這樣查多對多會查出來 queryset 對象# 自定義對多對多字段的處理authors = serializers.SerializerMethodField() def get_authors(self,obj): # 自定義多對多的處理,方法名有要求: get_字段名字temp=[]for obj in obj.authors.all():temp.append(obj.name)return temp
# 如果自定義了字段的處理 ,需要重寫 create 方法def create(self, validated_data): book=Book.objects.create(title=validated_data["title"],price=validated_data["price"],pub_date=validated_data["pub_date"],publish_id=validated_data["publish"]["pk"])book.authors.add(*validated_data["authors"])return book

序列化的使用

路由

url(r'book/', views.BookView.as_view()), url(r'book/(\d+)', views.BookDetailView.as_view()),

?

視圖

class BookView(APIView):def get(self,request): # 對所有數(shù)據(jù)進行查看book_list=Book.objects.all()bs=BookModelSerializers(book_list,many=True,context={'request': request}) # 如果使用了了返回超鏈接就必須要加 context參數(shù)return Response(bs.data)def post(self,request): # 對數(shù)據(jù)進行創(chuàng)建提交 # post請求的數(shù)據(jù)bs=BookModelSerializers(data=request.data)if bs.is_valid():print(bs.validated_data)bs.save() # .create()方法return Response(bs.data)else:return Response(bs.errors)class BookDetailView(APIView):def get(self,request,id): # 對單條數(shù)據(jù)進行查看 book=Book.objects.filter(pk=id).first()bs=BookModelSerializers(book,context={'request': request})return Response(bs.data)def put(self,request,id): # 對單條數(shù)據(jù)進行更新book=Book.objects.filter(pk=id).first()bs=BookModelSerializers(book,data=request.data)if bs.is_valid():bs.save() # .updata()return Response(bs.data)else:return Response(bs.errors)def delete(self,request,id): # 刪除數(shù)據(jù) Book.objects.filter(pk=id).delete()return Response()

?

轉(zhuǎn)載于:https://www.cnblogs.com/shijieli/p/10273584.html

總結(jié)

以上是生活随笔為你收集整理的rest framework 序列化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。