Django序列化
一、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)

浙公网安备 33010602011771号