Django框架之序列化组件
1.Django框架之web框架优化2.Django框架之python后端框架介绍3.Django框架之Django的安装与使用4.Django框架之小白必会三板斧5.Django框架之静态文件6.Django框架之request对象7.Django框架之ORM操作8.Django框架之请求生命周期流程图9.Django框架之路由层10.Django框架之视图层11.Django框架之模板层12.Django框架之模型层13.Django框架之Ajax基础14.Django框架之Ajax进阶15.JS插件补充
16.Django框架之序列化组件
17.Django框架之批量插入数据18.Django框架之分页器使用19.Django框架之form组件20.Django框架之Cookie和Session21.Django框架之中间件22.Django框架之auth模块23.Django便捷函数shortcuts一、为什么要序列化呢?
我们在写一些项目前后端是分离的,这意味着无法直接利用django提供的模版语法来实现前后端的数据交互,需要将数据转换成前后端都能接收处理的格式,即json,一般的格式都是列表套字典。
那么我的前端想拿到由ORM得到的数据库里面的一个个用户对象,而我的后端也想直接将实例化出来的数据对象直接发送给客户端,该怎么办呢?
那么这个时候,就可以用Django给我们提供的序列化方式。
二、如何序列化数据呢?
1、数据准备
需求:在前端获取后端用户表里面所有的数据,格式是列表套字典。
- 创建模型表
from django.db import models # Create your models here. class User(models.Model): username = models.CharField(max_length=32, verbose_name="姓名") age = models.IntegerField(verbose_name="年龄") gender_choices = ( (1, 'male'), (2, 'female'), (3, 'others') ) gender = models.IntegerField(choices=gender_choices, verbose_name="性别")
2、基于JsonResponse序列化数据
- 后端
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.get_gender_display() } user_list.append(tmp) return JsonResponse(user_list, safe=False) # return render(request,'04 ab_ser.html',locals())
- 前端
<body> {% for user_obj in user_queryset %} <p>{{ user_obj.name }}</p> {% endfor %} </body>
- 前端接收到的数据展示
[ {"pk": 1, "username": "xiao", "age": 18, "gender": "male"}, {"pk": 2, "username": "quan", "age": 34, "gender": "female"}, {"pk": 3, "username": "zheng", "age": 33, "gender": "others"}, {"pk": 4, "username": "xu", "age": 23, "gender": 4} ]
如果是前后端分离的项目,作为后端开发,只需要写代码将数据处理好,能够序列化返回给前端即可
在写一个接口文档,告诉前端每个字段代表的意思即可
写接口就是利用序列化组件渲染数据然后写一个接口文档,该交代交待,最后完事
3、基于Django自带的serializers组件
import json from django.http import JsonResponse from django.core import serializers def ab_ser(request): user_queryset = models.User.objects.all() # 序列化 res = serializers.serialize('json',user_queryset) """会自动帮你将数据变成json格式的字符串,并且内部非常的全面""" return HttpResponse(res)
- 前端返回的到的数据
[ { "model": "app01.user", "pk": 1, "fields": {"username": "xiao", "age": 18, "gender": 1}}, { "model": "app01.user", "pk": 2, "fields": {"username": "quan", "age": 34, "gender": 2}}, { "model": "app01.user", "pk": 3, "fields": {"username": "zheng", "age": 33, "gender": 3}}, { "model": "app01.user", "pk": 4, "fields": {"username": "xu", "age": 23, "gender": 4}} ]
三、补充
在Django中,序列化组件是一种强大的工具,用于将Django模型实例转换为其他数据格式(如JSON)或将其他数据格式转换为Django模型实例。这对于构建RESTful API和处理数据交换非常有用。下面是一个更详细的介绍以及示例代码:
1、 序列化数据
(1)使用django.core.serializers.serialize()
函数
from django.core.serializers import serialize from myapp.models import MyModel # 将MyModel模型实例序列化为JSON格式 data = serialize('json', MyModel.objects.all())
(2)使用Django REST framework
from rest_framework import serializers from myapp.models import MyModel # 定义序列化器类 class MyModelSerializer(serializers.ModelSerializer): class Meta: model = MyModel fields = '__all__' # 序列化模型实例 serializer = MyModelSerializer(instance=my_model_instance) data = serializer.data
2、 反序列化数据
(1)使用django.core.serializers.deserialize()
函数
from django.core.serializers import deserialize from io import BytesIO # 反序列化JSON数据为Django模型实例 json_data = '[{"model": "myapp.mymodel", "pk": 1, "fields": {"field1": "value1"}}]' data = BytesIO(json_data.encode('utf-8')) for obj in deserialize('json', data): obj.save()
(2)使用Django REST framework
from rest_framework import serializers from myapp.models import MyModel # 定义反序列化器类 class MyModelDeserializer(serializers.ModelSerializer): class Meta: model = MyModel fields = '__all__' # 反序列化数据 serializer = MyModelDeserializer(data=request.data) if serializer.is_valid(): serializer.save()
3、 定制序列化输出
(1)使用Django REST framework的序列化器类
from rest_framework import serializers from myapp.models import MyModel class MyModelSerializer(serializers.ModelSerializer): custom_field = serializers.SerializerMethodField() def get_custom_field(self, obj): return obj.field1 + ' - ' + obj.field2 class Meta: model = MyModel fields = ['field1', 'field2', 'custom_field']
这些示例展示了在Django中如何使用序列化组件来序列化和反序列化数据,以及如何定制序列化输出。通过这些工具,开发人员可以更灵活地处理数据,并在Django应用程序中实现数据交换和通信。
合集:
Django炒面
分类:
Django框架学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类