一、Django序列化
1、序列化应用场景
1、关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,由于httpresponse只能返回字符串或者是字节,而从数据库查到的数据是个query.set集合对象,需要将这个集合对象返回给客户端就用到了django序列化了
2、如果客户端是Ajax请求一般在服务端返回的数据为Json格式,所以也要用到序列化。
2、序列化方案一:serializers(django内置方法)
from
django.core
import
serializers
ret
=
models.BookType.objects.
all
()
data
=
serializers.serialize(
"json"
, ret)
3、序列化方案二:Python自带的json模块
import
json
#ret = models.BookType.objects.all().values('caption') #字典的形式
ret
=
models.BookType.objects.
all
().values_list(
'caption'
) #元组的形式,元组内部还是querset对象,所以不能被json所以需要转换成列表后再json
ret
=
list
(ret)
result
=
json.dumps(ret)
4、方案一和方案二的区别,方案1是吧表名称以及表主键都暴露出来了而且方案1无法跨表查询,但是方案2完美结局了
二、自定义序列化
1、由于json.dumps(user_list,cls=json.JSONEncoder)对每个元素进行字符串转换默认是cls下的JSONEncoder的方法所以我们可以自定义一个序列化
2、代码
import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): #继承json.JSONEncoder def default(self, field): if isinstance(field, datetime): #如果是datetime类型就处理成strftime('%Y-%m-%d %H:%M:%S')格式 return self.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field, date): return self.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field) # ds = json.dumps(d, cls=JsonCustomEncoder)