django的序列化

2022-01-18 21:42:01 字數 3714 閱讀 9691

關於django的序列化主要應用在將資料庫中檢索的資料返回給客戶端使用者,特別的ajax請求一般返回的json格式

兩種方法:

缺點就是只能應用於物件

"""

ret = models.book.objects.filter(con)

print(ret) # queryset,[物件] #就是上面是列表

from django.core import serializers

#這種方法是django的自己的序列化方法,但是有個缺點,下面這句的ret只能是物件,所以只能用第二種方式

data = serializers.serialize("json", ret)

print(type(data),data)

# 字串

"""

"""

#ret = models.book.objects.filter(con).values('name','book_type__caption')

ret = models.book.objects.filter(con).values_list('name', 'book_typ__ecaption')

print(ret,type(ret))

li = list(ret)

#這種方式也有乙個缺點,就是date和小數的時候不能序列化,所以需要自定義類並繼承

data = json.dumps(li)

print(data,type(data))

"""

但是json.dumps時無法處理datetime日期和小數,所以無法通過自定義處理器來做擴充套件,

如:

import json

from datetime import date

from datetime import datetime

from decimal import decimal

class jsoncustomencoder(json.jsonencoder):

def default(self, field):

if isinstance(field, datetime):

return field.strftime('%y-%m-%d %h:%m:%s')

elif isinstance(field, date):

return field.strftime('%y-%m-%d')

elif isinstance(field, decimal):

return str(field)

else:

return json.jsonencoder.default(self, field)

那麼怎麼應用呢?

看案例:

import

json

from datetime import

date

from datetime import

datetime

from decimal import

decimal

class

jsoncustomencoder(json.jsonencoder):

defdefault(self, field):

ifisinstance(field, datetime):

return field.strftime('

%y-%m-%d %h:%m:%s')

elif

isinstance(field, date):

return field.strftime('

%y-%m-%d')

elif

isinstance(field, decimal):

return

str(field)

else

:

return

json.jsonencoder.default(self, field)

defindex(request):

if request.method == '

post':

ret =

try:

post_data = request.post.get('

post_data

',none)

post_data_dict =json.loads(post_data)

print

(post_data_dict)

##構造搜尋條件

from django.db.models import

q con =q()

for k,v in

post_data_dict.items():

q =q()

q.connector = 'or'

for item in

v: con.add(q,

'and')

"""ret = models.book.objects.filter(con)

print(ret) # queryset,[物件] #就是上面是列表

from django.core import serializers

#這種方法是django的自己的序列化方法,但是有個缺點,下面這句的ret只能是物件,所以只能用第二種方式

data = serializers.serialize("json", ret)

print(type(data),data)

# 字串

""""""

#ret = models.book.objects.filter(con).values('name','book_type__caption')

ret = models.book.objects.filter(con).values_list('name', 'book_typ__ecaption')

print(ret,type(ret))

li = list(ret)

#這種方式也有乙個缺點,就是date和小數的時候不能序列化,所以需要自定義類並繼承

Django的序列化

關於django中的序列化主要應用在將資料庫中檢索的資料返回給客戶端使用者,特別的ajax請求一般返回的為json格式。1 serializers,django內建 from django.core import serializers ret models.booktype.objects.all...

Django序列化與反序列化

新建乙個模型類 class userinfo models.model name models.charfield max length 20 password models.charfield max length 11 addkey models.foreignkey addressinfo c...

django序列化serializers過程解析

drf的核心 就是 前後端分離的核心 前後端分離開發的核心 django的序列化工具讓你可以將django的模型 翻譯 成其它格式的資料。通常情況下,這種其它格式的資料是基於文字的,並且用於資料交換 傳輸過程。序列化資料 django為我們提供了乙個強大的序列化工具serializers。使用它也很...