• lf 前后端分离 (2) 课程数据获取,Serializer的返回


    一.关于课程数据的返回

    在进行前后端分离时,会通过def 进行前后端传值,

    本质上遵循rest 网址规范  增删改查查 get,post,put,del get(d+)

    1.在从数据库获取数据后,进行def 发送ajax数据,

    通过from rest_framework import serializers

    快速获取数据,在 class CourseSerializer(serializers.ModelSerializer)

    level = serializers.CharField(source="get_level_display")为获取的一对多的关联数据库的具体字段,不加source会直接显示_id

    在进行choice字段时,为了显示文字,采用
    level = serializers.CharField(source="course.get_level_display")

    在进行多对多字段时,需要自定义方法,遵循

    recommend_coursesinfo = serializers.SerializerMethodField()
    通过循环,所关联的全部字段,打印出要获取的值,注意,当字段函数与返回值同名时,会覆盖

     1 from django.shortcuts import render
     2 from rest_framework import serializers
     3 
     4 from app01.models import *
     5 
     6 
     7 class CourseSerializer(serializers.ModelSerializer):
     8     class Meta:
     9         model = Course
    10         fields = "__all__"
    11 
    12     level = serializers.CharField(source="get_level_display")
    13     coursedetail_id = serializers.CharField(source="coursedetail.pk")
    14 
    15 
    16 class CourseDetailSerializer(serializers.ModelSerializer):
    17     class Meta:
    18         model = CourseDetail
    19         fields = "__all__"
    20 
    21     name = serializers.CharField(source="course.name")
    22     prices = serializers.SerializerMethodField()
    23     brief = serializers.CharField(source="course.brief")
    24     study_all_time = serializers.StringRelatedField(source='hours')
    25     level = serializers.CharField(source="course.get_level_display")
    26     teacher = serializers.SerializerMethodField()
    27     is_online = serializers.CharField(source="course.get_status_display")
    28     recommend_coursesinfo = serializers.SerializerMethodField()
    29 
    30     def get_prices(self,instance):
    31         return [{"price": obj.price,
    32                  "valid_period": obj.valid_period,
    33                  "valid_period_text": obj.get_valid_period_display(),
    34                  "id": obj.pk,
    35                  }for obj in instance.course.price_policy.all()]
    36 
    37     def get_teacher(self, instance):
    38         return [{"name": obj.name,
    39                  "image": obj.image}for obj in instance.teachers.all()]
    40 
    41     def get_recommend_coursesinfo(self, instance):
    42         return [{"name": obj.name,
    43                  "pk": obj.pk} for obj in instance.recommend_courses.all()]
    serializers

    并且返回的数据需要与前端vue匹配,跨

     1 from django.shortcuts import render
     2 
     3 from app01 import models
     4 from app01.utils.auth import LoginAuth
     5 
     6 from rest_framework.response import Response
     7 from rest_framework.views import APIView
     8 
     9 from serializer.views import CourseSerializer, CourseDetailSerializer
    10 
    11 
    12 class CourseViews(APIView):
    13     authentication_classes = [LoginAuth]
    14 
    15     def get(self, request):
    16         course = models.Course.objects.all()
    17         data = CourseSerializer(course, many=True)
    18         res = {"error_no": 0, "data": data.data}
    19         return Response(res)
    20 
    21 
    22 class CourseDetailViews(APIView,):
    23 
    24     authentication_classes = [LoginAuth]
    25 
    26     def get(self, request, pk):
    27         coursedetail = models.CourseDetail.objects.get(pk=pk)
    28         data = CourseDetailSerializer(coursedetail, many=False)
    29         res = {"error_no": 0, "data": data.data}
    30         return Response(res)
    course

    其他详见

  • 相关阅读:
    使用yum 安装时出现 : Loaded plugins: fastestmirror
    三级店铺发布店铺悬赏必看
    专属包发布说明
    发布店铺内容(原封不动的直接复制内容发布就可以)
    tomcat 专属图片文件夹配置
    java websocket时时通信
    lua面向对象
    jenkins 查看请求调用栈信息
    从一个简单的例子看spring ApplicationContext上下文隔离
    java异常查看利器之使用 jvmti 的Callback_JVMTI_EVENT_EXCEPTION 事件查看异常
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10147743.html
Copyright © 2020-2023  润新知