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++学习三 模板类出错总结(Missing template arguments before 'L')
一.模板类的说明 模板类有一个好处是可以放宽你输入的数据类型. 比如有这样的一个函数: int add(int x, int y) { return x+y; } 这个函数对于int类型的x,y才适合 ...
- vue项目关闭eslint校验
[前言] eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格.这篇文章主要介绍了vue项目关闭eslint校验,需要的朋友可以参考下 [主体] 简介eslint esl ...
- Html学习之十三(导航栏的制作)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 攻防世界pwn-Mary_Morton
题目连接 https://adworld.xctf.org.cn/media/task/attachments/532c53dce1ce4f5d88461e4c2a336468 友情连接 https: ...
- Linux下MongoDB安装和配置(二)
1. 下载MongoDB 下载地址:https://www.mongodb.com/download-center/community 这里选择的是:mongodb-linux-x86_64-4.0. ...
- vue_03day
目录 作业: vue组件操作页面渲染: 组件渲染: 作业: vue组件操作页面渲染: 1.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/0 ...
- Jenkins安装第一个插件和通过离线安装包进行安装
1.打开左侧Manage Jenkins 选择Manage Plugins菜单 2.搜索Folders插件,该插件用于创建一个目录 3.点击安装进入插件安装状态,Jenkins会自动下载相关联的插件 ...
- es6的map()方法解释
es6的map()方法解释 map方法的作用不难理解,即“映射”,也就是原数组被“映射”成对应新数组.下面这个例子是数值项求平方: var data = [1, 2, 3, 4]; var arr ...
- 博云 x 某农商行 | 银行信息化运维系统升级的最佳实践
随着银行新一代信息化运维系统建设的推进,应用系统更新换代速度明显提升.数字化转型的发展对银行业务需求的敏捷性提出了越来越高的要求,促进敏捷开发和资源敏捷部署成为大势所趋. 背景 江苏某农村商业银行成立 ...
- webpack-实用的2个配置
①:运行npm run dev 后自动打开浏览器 首先找到config里面的index.js文件,然后打开找到autoOpenBrowser属性,把默认的false改为true即可 ②:简写路径 ...