REST framework在Django框架的基础上,进行了二次开发,主要用于构建Restful API,简称DRF框架。
提供了强大的Serializer序列化器,可以高效地进行序列化与反序列化操作
提供了丰富的类视图、Mixin扩展类、ViewSet视图集
提供了直观的Web API界面
实现了多种身份认证和权限认证
实现了排序、过滤、分页、搜索、限流等功能
可扩展性强,插件丰富
1 pip install djangorestframework 2 pip install markdown
在全局settings.py中添加子应用,将‘rest_framework‘添加到INSTALLED_APPS列表
INSTALLED_APPS = [ ‘rest_framework‘, ]
当我们进行Restful接口开发时,视图中最主要做的其实就是三件事:
概念:将变量从内存中取出,变为可存储或可传输的过程。简单来说就是,程序中的数据类型转换为前端可处理的数据格式,如json。
使用场景:从数据库中查询到的数据转换为json,返回给前端。(查询数据)
在对数据进行序列化操作前,首先需要在对应的应用目录下创建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)
序列化器类中定义的字段,如果没有特殊的约束,必须传参,同时也都会返回。
在定义序列化器类时,需要注意的是:
场景:序列化输出 —— 查询数据
在进行序列化操作时,需要传入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