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()
通过循环,所关联的全部字段,打印出要获取的值,注意,当字段函数与返回值同名时,会覆盖
- 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的返回的更多相关文章
- 七:Spring Security 前后端分离登录,非法请求直接返回 JSON
Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...
- Spring Security 前后端分离登录,非法请求直接返回 JSON
hello 各位小伙伴,国庆节终于过完啦,松哥也回来啦,今天开始咱们继续发干货! 关于 Spring Security,松哥之前发过多篇文章和大家聊聊这个安全框架的使用: 手把手带你入门 Spring ...
- lf 前后端分离 (6) 支付
支付 import datetime from django.core.exceptions import ObjectDoesNotExist from rest_framework.views i ...
- lf 前后端分离 (5) 优惠券
关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...
- lf 前后端分离 (4) 价格策略
一.价格策略 价格策略就是通过前端发送要购买的课程以及价格策略来找出表关联的字段返回客户端 通过contenttype 属性 找到课程所有的价格策略 for prcie_policy in cours ...
- lf 前后端分离 (1) auth,token认证
一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...
- lf 前后端分离 (3) 中间建跨域
一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixin class CorsMiddleware ...
- netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印
1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
随机推荐
- C++编程思想 - 对象的创建和使用
前言 用户定义的数据类型(data type)或类(class),是C++区别于传统过程型语言的地方. 通常将创建好的类库存放在库(library)中. 本篇会使用几个C++类库(class libr ...
- LeetCode 268. Missing Number缺失数字 (C++/Java)
题目: Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is mi ...
- 提高python运行效率-numba
Numba是Python的即时编译器,在使用NumPy数组和函数以及循环的代码上效果最佳.使用Numba的最常见方法是通过其装饰器集合,这些装饰器可应用于您的函数以指示Numba对其进行编译.调用Nu ...
- 机器学习之线性回归以及Logistic回归
1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...
- 洛谷P1283 平板涂色 &&一本通1445:平板涂色
题目描述 CE数码公司开发了一种名为自动涂色机(APM)的产品.它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色. 为了涂色,APM需要使用一组刷子.每个刷子涂一种不同的颜色C.APM拿 ...
- JAVA基础系列:Arrays.sort()
JDK 1.8 java.util.Arrays.class(rt.jar) 1. Collections.sort方法底层就是调用的Arrays.sort方法. 2. Java Arrays中提供 ...
- 宝塔面板+djiango+mod wsgi +apache 配置多项目站点
在一台服务器上同时有多个djiango项目,那么就需要配置多站点,利用不同的域名不同的端口 同时存在多个项目. 环境,centos + 宝塔面板+apache+django 1.在centos环境下 ...
- ubuntu18.04下安装无线网卡驱动心得
联想Lenovo的笔记本,装完系统wifi显示找不到适配器. lspci | grep Wireless 显示无线网卡类型为博通的BCM43162. 网上一查,果然有问题. apt install f ...
- 手把手教你如何用Fiddler抓取手机数据包(iOS+Android)
本文主要教你如何通过 Fiddler 来抓取手机端的数据包,包括 iOS 和 Android 端的配置和抓取. 一.Fiddler下载安装 访问 Fiddler 官网:https://www.tele ...
- 函数式接口与Stream流
lambda表达式是jdk8的特性.lambda表达式的准则是:可推断,可省略. 常规代码写一个多线程 public class Main { public static void main(Stri ...