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)  

 

posted @ 2017-09-21 17:02  mx轩  阅读(195)  评论(0编辑  收藏  举报