首页 > 其他 > 详细

Django之REST framework框架与Serializer序列化

时间:2021-08-15 11:24:51      阅读:23      评论:0      收藏:0      [点我收藏+]
 
 

一、简介

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)

 

Django之REST framework框架与Serializer序列化

原文:https://www.cnblogs.com/jiuyue-flamen/p/15142453.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!