24.Django_framework_序列化

上一篇说了使用Django传统写CRUD的痛点,那么现在就说解决这些痛点的方法

Django REST framework

  • 简称为DRF框架或者REST freamwork框架
  • 是在Django框架的基础上,进行二次开发的
  • 适用于构建符合RESTful风格的API

一、特性

  • 提供了强大的Serializer序列化器,可以高效地进行序列化与反序列化操作
  • 提供了丰富的类视图、Mixin扩展类、ViewSet视图集
  • 强大的排序,过滤,分页,搜索,限流等功能
  • 多种身份权限认证
    = 可扩展性,插件丰富
  • 提供了直观的Web API界面

二、序列化器

数据校验

  • 判断用户输入的数据是否异常

数据转换

  • 反序列化
    前端传入的数据格式(json,xml,text)=>程序中的数据类型

  • 序列化
    程序中的数据类型->数据格式(前端可以处理的数据,如json,xml,text)

三、序列化:

单个结果的查询集
修改上一篇的代码_根据id查询User信息

1.安装

pip install djangorestframework

2.配置

settings.pyINSTALLED_APPS中,添加rest_framework

'rest_framework'

3.查询单个结果的结果,使用ID获取项目:

3.1.创建项目序列化器类:

需要序列化输出哪些字段,那么就在序列化器中定义这些字段
新建projects/serializer.py文件:

from rest_framework import serializers

class ProjectsSerializer(serializers.Serializer):
    """
    创建项目序列化器类:需继承Serializer类或其子类
    """
    # 和model类的字段进行对比;注意:max_length的位置需注意,并且有些类型是没有这个字段的
    # label:相当于verbose_name
    # help_text:相当于帮助信息
    # max_length:最大长度
    # !!下面两个是配对的
    # allow_null:相当于null(指定字段非必填,否则是必填)
    # allow_blank:相当于blank(指定字段非必填,否则是必填)


    #和model中字段可以不一致,需要用就显示哪些
    name = serializers.CharField(label='用户名', max_length=128, help_text='用户名' )
    leader = serializers.CharField(label="负责人", max_length=50, help_text="负责人")
    tester = serializers.CharField(label="测试人员", max_length=50, help_text="测试人员")
    programer = serializers.CharField(label="开发人员", max_length=50, help_text="开发人员")
    publish_app = serializers.CharField(label="发布应用", max_length=50, help_text="发布应用")
    desc = serializers.CharField(label="简要描述", max_length=200, help_text="简要描述")
3.2、在view的接口中使用序列化器
步骤:
  • a.传递查询集给序列化器的instance参数,获得序列化器对象
  • b.从序列化对象的data获取序列化后的dict类型的数据

例子:修改projects/views.py中根据id查询project信息的接口

    def get(self,request,pk):
    
          project = Projects.objects.get(id=pk)
        # 1.传递查询集给序列化器,并返回序列化器对象
        serializer = ProjectsSerializer(instance=project)

        # 2.通过序列化器对象的data属性,获取序列化后的dict

        return JsonResponse(serializer.data)
3.3.访问http://127.0.0.1:8886/users/9

在这里插入图片描述

4.多个结果的查询集

获取项目列表:
步骤和之前一样,只不过因为需要序列化的内容中包含多个结果的查询集,所以在传递查询集给序列化器处理的时候,需要定义many=True

    def get(self,request):
        #1>从数据库获取所有项目信息,列表格式
        projects_qs = Projects.objects.all()
        # 查询集中有多个结果,需要定义many=True
        serializer = ProjectsSerializer(instance=projects_qs,many=True)
       #JsonResponse第一个参数只能默认为dict字典,如果未其余类型需要修改safe=False
        return JsonResponse(serializer.data,safe=False)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章