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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rest_framework03:查询所有/新增数据/删除一个数据/封装Response/序列化与反序列化

發布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest_framework03:查询所有/新增数据/删除一个数据/封装Response/序列化与反序列化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

查詢所有

1.創建新clase和url,避免與查詢一個功能邏輯混亂。

2.增加many=True,

book_ser=BookSerializer(books,many=True)

urls.py:

path('books/',views.BooksView.as_view())

views.py

class BooksView(APIView):def get(self,request):response_msg = {'status': 100, 'msg': '成功'}books=Book.objects.all()book_ser=BookSerializer(books,many=True) # 序列化多條。 如果一條,不需要寫response_msg['data']=book_ser.datareturn Response(response_msg)

新增數據

views.py內的新類BooksView,增加post

# 新增def post(self,request):response_msg = {'status': 100, 'msg': '成功'}# 新增沒有instance,只有databook_ser=BookSerializer(data=request.data)# 如果沒有data=,會報錯。第一個參數是instance# book_ser = BookSerializer(request.data)# 校驗字段if book_ser.is_valid():book_ser.save()response_msg['data']=book_ser.dataelse:response_msg['status']=102response_msg['msg']='新增數據校驗失敗'response_msg['data']=book_ser.datareturn Response(response_msg)

在ser.py重寫create 方法

1.需要導入orm Book

2.需要返回

def create(self, validated_data):instance=Book.objects.create(**validated_data)# 正常情況是按下面寫的,但是加**打散后是一樣,所以直接**# Book.objects.create(name=validated_data.get('name'))return instance

刪除一個數據

因為需要pk值,所以放入原來類BookView

def delete(self,request,pk):ret=Book.objects.filter(pk=pk).delete()return Response({'status': 100, 'msg': '刪除成功'})

封裝Response

1.新建py文件。如utils.py

get_dic用于返回字典

class MyResponse():def __init__(self):self.status=100self.msg='成功'@propertydef get_dic(self):return self.__dict__if __name__ == '__main__':res=MyResponse()print(res.msg)

2.在views.py 導入并使用

注意:return Response(response.get_dic)

仍然使用rest_framework的Response返回,封裝的只是字典結構。

from app01.utils import MyResponseclass BooksView(APIView):# 使用封裝responsedef get(self, request):response=MyResponse()books = Book.objects.all()book_ser = BookSerializer(books, many=True) # 序列化多條。 如果一條,不需要寫response.data = book_ser.datareturn Response(response.get_dic)# 新增def post(self, request):response=MyResponse()# 新增沒有instance,只有databook_ser = BookSerializer(data=request.data)# 如果沒有data=,會報錯。第一個參數是instance# book_ser = BookSerializer(request.data)# 校驗字段if book_ser.is_valid():book_ser.save()response.data = book_ser.dataelse:response.status = 102response.msg = '新增數據校驗失敗'response.data = book_ser.datareturn Response(response.get_dic)

序列化與反序列化

序列化:得到字典,可以理解為查詢操作。

反序列化:修改數據,可以理解為修改與新增操作

1.只傳data,執行save(),觸發create()方法執行

2.傳instance和data,執行save(),觸發update()方法執行

總結

以上是生活随笔為你收集整理的rest_framework03:查询所有/新增数据/删除一个数据/封装Response/序列化与反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。