• Django:前后端分离 djangorestframework开发API接口 serializer序列化认证组件


    参考:https://blog.csdn.net/zhangmengran/article/details/84887206

    目的:

      使用serializer序列化器将QuerySet数据序列化为json数据,用django restframework开发后端接口将此json数据返回

    serializer序列化
    1.主要是序列化数据,将QuerySet集合中的ORM对象序列化成json字符串,作为接口数据返回(json格式)

    一、编写models.py

    from django.db import models
    
    
    class Sonar(models.Model):
        """
    
        """
        project = models.CharField(max_length=20)
        bugs = models.CharField(max_length=10)
        vulnerability = models.CharField(max_length=10)
        issue_count = models.CharField(max_length=10)
        issue_url = models.CharField(max_length=200)
    
        def __str__(self):
            return self.project

    二、在utils包下的serializer.py文件中自定义一个类

    from rest_framework import serializers
    
    
    class SonarSerializer(serializers.Serializer):
        # 要定义需要序列化的字段,注意:这里定义的字段的值必须和models.py中的字段保持一致,将models换为serializers就行
        project = serializers.CharField(max_length=20)
        bugs = serializers.CharField(max_length=10)
        vulnerability = serializers.CharField(max_length=10)
        issue_count = serializers.CharField(max_length=10)
        issue_url = serializers.CharField(max_length=200)

    三、然后编写视图类views.py

    from django.shortcuts import render
    from rest_framework.views import APIView
    from util.serializer import SonarSerializer
    from rest_framework.response import Response
    from sonar.models import Sonar
    
    
    class SonarCount(APIView):
    
        def get(self, request, *args, **kwargs):
            # 查询出所有的数据,为QuerySet格式
            sonar = Sonar.objects.all()
            total = sonar.count()
            # 参数:1.instance需要序列化的对象  2.是一个对象还是多个对象,如果是多个必须设置many=True
            serializer = SonarSerializer(instance=sonar, many=True)
            # 返回最终的json数据serializer.data
            return Response({"status": "success", "total": total, "rows":serializer.data})

    四、最后设置路由:

    from django.conf.urls import url
    from sonar.views import SonarCount
    
    urlpatterns = [
        url(r'^sonarCount/', SonarCount.as_view()),
    ]

    post测试一下

     优化:优化一下视图类

    from rest_framework.views import APIView
    from util.serializer import SonarSerializer
    from rest_framework.response import Response
    from sonar.models import Sonar
    
    
    class SonarCount(APIView):
    
        def post(self, request, *args, **kwargs):
            # 没有传递入参时会报KeyErrore,将此异常捕获
            try:
                query = request.data['id']
            except:
                # 捕获后置为None
                query=None
            # 如果query值存在则查询对应的数据
            if query:
                sonar = Sonar.objects.filter(id=query)
            else:
                # 不存在则默认查询所有数据
                sonar = Sonar.objects.all()
            # 获取总条数
            total = sonar.count()
            # 参数:1.instance需要序列化的对象  2.是一个对象还是多个对象,如果是多个必须设置many=True
            serializer = SonarSerializer(instance=sonar, many=True)
            # 返回最终的json数据serializer.data,根据需要对返回的json略作修改
            return Response({"status": "success", "total": total, "rows": serializer.data})

    测试:

    1、传递参数时,返回对应的数据

    2、不传递入参时,返回全部数据

    以上只是单表数据的序列化,下面看看序列化多表(一对多、多对多)

    参考:https://blog.csdn.net/zhangmengran/article/details/84887206

  • 相关阅读:
    1203 有穷自动机
    1111 评论
    C语言文法 改
    用户调研
    阅读《构建之法》 第8 第9 第10章
    sprint冲刺(第二天)
    sprint初步计划(第一天)
    作业6 团队项目之需求
    作业5 四则运算 测试与封装 5.1 5.2
    作业5 四则运算 测试与封装 5.1
  • 原文地址:https://www.cnblogs.com/gcgc/p/11608438.html
Copyright © 2020-2023  润新知