首页 > 代码库 > django的序列化
django的序列化
关于django的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的Json格式
两种方法:
方法一:serializers:
缺点就是只能应用于对象
""" ret = models.Book.objects.filter(con) print(ret) # queryset,[对象] #就是上面是列表 from django.core import serializers #这种方法是django的自己的序列化方法,但是有个缺点,下面这句的ret只能是对象,所以只能用第二种方式 data = http://www.mamicode.com/serializers.serialize("json", ret) print(type(data),data) # 字符串 """
方法二:json.dumps
""" #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 = http://www.mamicode.com/json.dumps(li)"""
但是json.dumps时无法处理datetime日期和小数,所以无法通过自定义处理器来做扩展,
如:
import jsonfrom datetime import datefrom datetime import datetimefrom decimal import Decimalclass 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 jsonfrom datetime import datefrom datetime import datetimefrom decimal import Decimalclass 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)def index(request): if request.method == ‘POST‘: ret = {‘status‘: False, ‘message‘: ‘‘, ‘data‘:None} try: post_data = request.POST.get(‘post_data‘,None) post_data_dict = json.loads(post_data) print(post_data_dict) # {‘name‘: [‘11‘, ‘sdf‘],‘price‘: [‘11‘, ‘sdf‘]} # 构造搜索条件 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: q.children.append((k, item)) con.add(q, ‘AND‘) """ ret = models.Book.objects.filter(con) print(ret) # queryset,[对象] #就是上面是列表 from django.core import serializers #这种方法是django的自己的序列化方法,但是有个缺点,下面这句的ret只能是对象,所以只能用第二种方式 data = http://www.mamicode.com/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 = http://www.mamicode.com/json.dumps(li)>""" print(type(con)) result = models.Book.objects.filter(con).values(‘name‘,‘price‘,‘pubdate‘,‘book_type__caption‘) # ret = models.Book.objects.filter(con).values_list(‘name‘, ‘book_type__caption‘) li = list(result) ret[‘status‘] = True ret[‘data‘] = li except Exception as e: ret[‘message‘] = str(e) ret_str = json.dumps(ret, cls=JsonCustomEncoder) return HttpResponse(ret_str) return render(request, ‘input.html‘)
django的序列化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。