Django自带的序列化组件serialize

django自带的序列化组件serialize

引子:

# 前后端分离的项目
    作为后端开发的我们只需要写代码将数据处理好
    	能够序列化返回给前端即可 
        再写一个接口文档 告诉前端每个字段代表的意思即可
    	前端对数据做处理也是比较麻烦的。
        
# 所以我们在写前后端分离项目的时候,要想让前端页面也能够识别到后端的数据,那就要用到json格式的数据来进行交互。

准备工作:

models.py

class User(models.Model):
    username = models.CharField(max_length=32)
    age  = models.IntegerField()
    gender_choice = (
        (1,'male'),
        (2,'female'),
        (3,'others')
    )
    gender = models.IntegerField(choices=gender_choice)

在讲解序列化组件之前我们先来看一个例子:

# 需求:在前端获取到后端用户表里面所有的数据 并且要是列表套字典的格式
# 我们先用我们基础阶段的知识来完成这个效果:

http页面

<body>
{% for user_obj in user_list %}
    <p>{{ user_obj }}</p>
{% endfor %}
</body>

views.py

from django.http import JsonResponse   # 导入JsonResponse模块
from app01 import models


def ab_ser(request):
    user_queryset = models.User.objects.all()  # 查询所有的数据对象
    user_list = []   # 创建一个空列表
    for user_obj in user_queryset:   # 循环出每一个数据对象
        tmp = {       # 利用对象点的方式取出每一个对应元素来充当字段的值
            'pk':user_obj.pk,
            'username':user_obj.username,
            'age':user_obj.age,
            'gender':user_obj.gender
        }
        user_list.append(tmp)   # 添加到列表中
    return JsonResponse(user_list, safe=False)   # 转换成json格式返回给前端页面(safe属性为ture则表示只能传dict字典的形式,因为现在为列表的形式,所以改为False)
# 这样就可以返回给前端我们需要的格式(列表套字典的格式)信息。
[
 {"pk": 1, "username": "gary", "age": 19, "gender": 1}, 
 {"pk": 2, "username": "tom", "age": 20, "gender": 2}, 
 {"pk": 3, "username": "kevin", "age": 29, "gender": 3}, 
 {"pk": 4, "username": "jack", "age": 38, "gender": 4}
]

# 这样写是不是非常的麻烦,如果字段非常的多 我们还要把所有的字段,字段对应的值拿出来,并且如果添加新的字段,我们还需要手动来操作添加新的键值对。

# 我们在写前后端分离的时候,有很多专门为我们做序列化组件的模块,我们这里来介绍一个:

序列化模块serialize

# 格式:serializers.serialize('序列化成什么格式',数据)
# 示例:

from django.core import serializers   # 导入

def ab_ser(request):
    user_queryset = models.User.objects.all()
    res = serializers.serialize('json',user_queryset)  # 序列化成json格式数据
        """会自动帮你将数据变成json格式的字符串 并且内部非常的全面"""
    return HttpResponse(res)  # 返回给前端页面

'''

[{"model": "app01.user", 
"pk": 1, 
"fields": {"username": "gary", "age": 19, "gender": 1}}, 

{"model": "app01.user", 
"pk": 2, 
"fields": {"username": "tom", "age": 20, "gender": 2}},

{"model": "app01.user", 
"pk": 3, 
 "fields": {"username": "kevin", "age": 29, "gender": 3}}, 
 
 {"model": "app01.user", 
 "pk": 4,
 "fields": {"username": "jack", "age": 38, "gender": 4}}]

'''

# 我们可以看到它帮我们处理的数据是非常全面的,
# 告诉了我们这个数据来自于哪一个应用下的拿一张表,还告诉了我们对应的主键值,和详细信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值