一.关于课程数据的返回

在进行前后端分离时,会通过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()
通过循环,所关联的全部字段,打印出要获取的值,注意,当字段函数与返回值同名时,会覆盖
 from django.shortcuts import render
from rest_framework import serializers from app01.models import * class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = "__all__" level = serializers.CharField(source="get_level_display")
coursedetail_id = serializers.CharField(source="coursedetail.pk") class CourseDetailSerializer(serializers.ModelSerializer):
class Meta:
model = CourseDetail
fields = "__all__" name = serializers.CharField(source="course.name")
prices = serializers.SerializerMethodField()
brief = serializers.CharField(source="course.brief")
study_all_time = serializers.StringRelatedField(source='hours')
level = serializers.CharField(source="course.get_level_display")
teacher = serializers.SerializerMethodField()
is_online = serializers.CharField(source="course.get_status_display")
recommend_coursesinfo = serializers.SerializerMethodField() def get_prices(self,instance):
return [{"price": obj.price,
"valid_period": obj.valid_period,
"valid_period_text": obj.get_valid_period_display(),
"id": obj.pk,
}for obj in instance.course.price_policy.all()] def get_teacher(self, instance):
return [{"name": obj.name,
"image": obj.image}for obj in instance.teachers.all()] def get_recommend_coursesinfo(self, instance):
return [{"name": obj.name,
"pk": obj.pk} for obj in instance.recommend_courses.all()]

serializers

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

 from django.shortcuts import render

 from app01 import models
from app01.utils.auth import LoginAuth from rest_framework.response import Response
from rest_framework.views import APIView from serializer.views import CourseSerializer, CourseDetailSerializer class CourseViews(APIView):
authentication_classes = [LoginAuth] def get(self, request):
course = models.Course.objects.all()
data = CourseSerializer(course, many=True)
res = {"error_no": 0, "data": data.data}
return Response(res) class CourseDetailViews(APIView,): authentication_classes = [LoginAuth] def get(self, request, pk):
coursedetail = models.CourseDetail.objects.get(pk=pk)
data = CourseDetailSerializer(coursedetail, many=False)
res = {"error_no": 0, "data": data.data}
return Response(res)

course

其他详见

lf 前后端分离 (2) 课程数据获取,Serializer的返回的更多相关文章

  1. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

  2. Spring Security 前后端分离登录,非法请求直接返回 JSON

    hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...

  3. lf 前后端分离 (6) 支付

    支付 import datetime from django.core.exceptions import ObjectDoesNotExist from rest_framework.views i ...

  4. lf 前后端分离 (5) 优惠券

    关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...

  5. lf 前后端分离 (4) 价格策略

    一.价格策略 价格策略就是通过前端发送要购买的课程以及价格策略来找出表关联的字段返回客户端 通过contenttype 属性 找到课程所有的价格策略 for prcie_policy in cours ...

  6. lf 前后端分离 (1) auth,token认证

    一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...

  7. lf 前后端分离 (3) 中间建跨域

    一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixin class CorsMiddleware ...

  8. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  9. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

随机推荐

  1. 2019面向对象程序设计(java)课程学习进度条

    2019面向对象程序设计(java)课程学习进度条 周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序阅读或编程任务 1 20/10 1/0 5 九九 ...

  2. OC方法交换swizzle详细介绍——不再有盲点

    原文链接:https://www.cnblogs.com/mddblog/p/11105450.html 如果对方法交换已经比较熟悉,可以跳过整体介绍,直接看常见问题部分 整体介绍 方法交换是runt ...

  3. 【Ribbon篇四】Ribbon初步配置(2)

    一. 微服务消费者改造 注:修改microservicecloud-consumer-dept-80工程 1. pom.xml添加依赖 <!-- eureka client --> < ...

  4. 剑指Offer-17.树的子结构(C++/Java)

    题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析: 注意这道题是判断B是不是A的子结构,而不是子树,这一点要注意下,且空树不是任意一个树的子结构 ...

  5. JDOJ3004 超级楼梯

    JDOJ3004 超级楼梯 https://neooj.com/oldoj/problem.php?id=3004 题目描述 有一个超级楼梯共N级,刚开始时你在第一级,若每次只能跨上一级或两级,要走上 ...

  6. 工具资源系列之 github 上各式各样的小徽章从何而来?

    前言 平时大家在在逛 github 时或多或少都看到过项目首页各式各样的小徽章,不知道你是否和我一样好奇这些小徽章都是哪来的呢? 首先我们先来一睹为快目前前端开发的三大主流框架: var ,看一看他们 ...

  7. 设计模式-Builder模式(创建型模式)

    //以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Product.h #pragma once class Product { public: Product(); ~ ...

  8. C实现string字符串

    在C中实现string字符串,使用typedef将string定义为char *. #include <stdio.h> #include <stdlib.h> #includ ...

  9. [Taro] taro中定义以及使用全局变量

    taro中定义以及使用全局变量 错误的姿势 // app.tsx文件中 class App extends Component { componentDidMount() { this.user = ...

  10. c++负数下标

    如何使用负数下标呢? 让数组前面有东西 int y[100]; int *z = y + 50; 这样的话调用\(z[-50]\)就变成了调用\(y[0]\) z[-50] = y[0]; 然后这样就 ...