Django之REST framework框架与Serializer序列化
一、简介
REST framework在Django框架的基础上,进行了二次开发,主要用于构建Restful API,简称DRF框架。
二、特性
提供了强大的Serializer序列化器,可以高效地进行序列化与反序列化操作
提供了丰富的类视图、Mixin扩展类、ViewSet视图集
提供了直观的Web API界面
实现了多种身份认证和权限认证
实现了排序、过滤、分页、搜索、限流等功能
可扩展性强,插件丰富
三、安装与配置
1、安装
1 pip install djangorestframework 2 pip install markdown
2、配置
在全局settings.py中添加子应用,将'rest_framework'添加到INSTALLED_APPS列表
INSTALLED_APPS = [ 'rest_framework', ]
四、序列化器
当我们进行Restful接口开发时,视图中最主要做的其实就是三件事:
- 将请求的数据(json等格式)转换为模型类对象 —— 反序列化
- 操作数据库(读、写)
- 将模型类对象转换为响应数据 —— 序列化
1、序列化与反序列化
1.1、序列化
概念:将变量从内存中取出,变为可存储或可传输的过程。简单来说就是,程序中的数据类型转换为前端可处理的数据格式,如json。
使用场景:从数据库中查询到的数据转换为json,返回给前端。(查询数据)
1.2、反序列化
概念:将变量的内容从序列化的对象写到内存里的过程。简单来说就是,格式为json、xml、text等的数据转换为程序中的数据类型。
使用场景:前端传递过来的数据,反序列化后,存储到数据库中。(创建、更新数据)
2、使用
2.1、定义序列化器类
在对数据进行序列化操作前,首先需要在对应的应用目录下创建serializers.py,引入serializers模块,定义一个序列化器类,继承serializers.Serializer父类。
from rest_framework import serializers class ProjectSerializer(serializers.Serializer): name = serializers.CharField(max_length=50, label='项目名称', help_text='项目名称', read_only=True) desc = serializers.CharField(max_length=200, label='项目简介', help_text='项目简介', allow_null=True, allow_blank=True, default='项目简介') update_time = serializers.DateTimeField(label='更新时间', help_text='更新时间', required=False)
序列化器类中定义的字段,如果没有特殊的约束,必须传参,同时也都会返回。
在定义序列化器类时,需要注意的是:
- 序列化器类字段名需要与模型类中的字段名相同
- 序列化器类的字段类型:CharField、BooleanField、IntegerField等要与模型类中的字段对应
2.2、序列化器模型类对象
场景:序列化输出 —— 查询数据
在进行序列化操作时,需要传入instance参数
''' 语法:序列化器类(instance=模型类对象/查询集, many=True) 如果未传递many=True,则序列化器对象返回字典,否则返回嵌套字典的列表 ''' serializer_obj = ProjectSerializer(instance=qs, many=True)
来看一个完整的序列化过程,以项目查询为例
from django.http import JsonResponse from django.views import View from .models import Projects from .serializers import ProjectSerializer class ProjectsPage(View): # 查询项目信息:id默认为空 def get(self, request, param=None): res = {} try: if param: # 根据id查询项目详情 pro_obj = Projects.objects.get(id=param) serializer_obj = ProjectSerializer(instance=pro_obj) res['data'] = serializer_obj.data else: # 查询接口列表 qs = Interfaces.objects.all() serializer_obj = ProjectSerializer(instance=qs, many=True) res['data'] = serializer_obj.data res['code'] = 0 res['message'] = '查询成功' except Exception as e: res['code'] = 1 res['message'] = f'查询失败:{e}'
return JsonResponse(data)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律