django在使用ajax发送数据的时候只能以字符串的形式发送,故而,如果需要发送queryset数据类型的时候是不可以发送的,为此,django使用了一个模块来为此提供支持
使用erializers模块序列化
可以序列化queryset类型
def get_data(request):
user_list = models.UserInfo.objects.all
from django.core import serializers
user_list_str = serializers.serialize('json', user_list)
return HttpResponse(user_list_str)
使用这种方式虽然简单粗暴,但是会将表名等信息暴露,因此不推荐
使用json序列化
def get_data(request):
user_list = models.UserInfo.objects.val('name', 'pwd')
user_list = list(user_list)
val = json.dumps(user_list)
return HttpResponse(val)
但是json只能处理基础的列表,字典等简单类型,他不能处理时间等复杂类型
自定义json
自定制 json.dumps方法中cls参数(serializers内部也是这样实现的)
vale=json.dumps(userlist,cls=json.JSONEncoder)
from datetime import datetime
from datetime import date
import json
#自定义一个类,由于Python的一数据类型,json可以序列化,所有可以继承json.JSONEncoder方法
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')
else:
return json.JSONEncoder.default(self, field)
data_list=[
{'name':'eric0','age':18,'ctime':datetime.now()},
{'name':'eric1','age':18,'ctime':datetime.now()},
{'name':'eric2','age':18,'ctime':datetime.now()}
]
str1=json.dumps(data_list, cls=JsonCustomEncoder)
print(str1)