后端课程接口

路由:course/urls.py
router.register('categories', views.CourseCategoryViewSet, 'categories')  # 分类
router.register('free', views.CourseViewSet, 'free')  # 课程
视图:course/views.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
from . import models, serializers
# 课程分类群查
class CourseCategoryViewSet(GenericViewSet, ListModelMixin):queryset = models.CourseCategory.objects.filter(is_delete=False, is_show=True).all()serializer_class = serializers.CourseCategorySerializer# 课程群查# 分页组件:基础分页(采用)、偏移分页、游标分页(了解)
from . import pagination# 过滤组件:搜索功能、排序功能
from rest_framework.filters import SearchFilter, OrderingFilter# django-filter插件:分类功能
from django_filters.rest_framework import DjangoFilterBackend
from .filters import CourseFilterSet# 前台携带所有过滤规则的请求url:
# http://127.0.0.1:8000/course/free/?page=1&page_size=10&search=python&ordering=-price&min_price=30&count=1
class CourseViewSet(GenericViewSet, ListModelMixin):queryset = models.Course.objects.filter(is_delete=False, is_show=True).all()serializer_class = serializers.CourseSerializer# 分页组件pagination_class = pagination.PageNumberPagination# 过滤组件:实际开发,有多个过滤条件时,要把优先级高的放在前面filter_backends = [SearchFilter, OrderingFilter, DjangoFilterBackend]# 参与搜索的字段search_fields = ['name', 'id', 'brief']# 允许排序的字段ordering_fields = ['id', 'price', 'students']# 过滤类:分类过滤、区间过滤filter_class = CourseFilterSet
分类区间过滤:filters.py
# django-filter插件 过滤类
from django_filters.filterset import FilterSet
from . import models
from django_filters import filters
class CourseFilterSet(FilterSet):# 区间过滤:field_name关联的Model字段;lookup_expr设置规则;gt是大于,gte是大于等于;min_price = filters.NumberFilter(field_name='price', lookup_expr='gte')max_price = filters.NumberFilter(field_name='price', lookup_expr='lte')class Meta:model = models.Course# 如果过滤条件仅仅就是Model已有的字段,方式一更好# 但是方式二可以自定义过滤字段fields = ['course_category', 'min_price', 'max_price']
分页:paginations.py
from rest_framework.pagination import PageNumberPagination as DrfPageNumberPaginationclass PageNumberPagination(DrfPageNumberPagination):# 默认一页显示的条数page_size = 2# url中携带页码的keypage_query_param = 'page'# url中用户携带自定义一页条数的keypage_size_query_param = 'page_size'# 用户最大可自定义一页的条数max_page_size = 10
模型:course/models.py
class Course(BaseModel):# ...@propertydef course_type_name(self):return self.get_course_type_display()@propertydef level_name(self):return self.get_level_display()@propertydef status_name(self):return self.get_status_display()# 连表序列化字段@propertydef section_list(self):# 检索所以章节所以课时,返回前4课时,不足4课时全部返回temp_section_list = []for chapter in self.coursechapters.all():for section in chapter.coursesections.all():temp_section_list.append({'name': section.name,'section_link': section.section_link,'duration': section.duration,'free_trail': section.free_trail,})if len(temp_section_list) >= 4:return temp_section_list  # 最多4条return temp_section_list  # 不足4条class Teacher(BaseModel):# ...@propertydef role_name(self):return self.get_role_display()
序列化:course/serializers.py
from rest_framework import serializers
from . import models
class CourseCategorySerializer(serializers.ModelSerializer):class Meta:model = models.CourseCategoryfields = ('id', 'name')# 子序列化
class TeacherSerializer(serializers.ModelSerializer):class Meta:model = models.Teacherfields = ('name', 'role_name', 'title', 'signature', 'image', 'brief')class CourseSerializer(serializers.ModelSerializer):teacher = TeacherSerializer(many=False)class Meta:model = models.Coursefields = ('id','name','course_img','brief','attachment_path','pub_sections','price','students','period','sections','course_type_name','level_name','status_name','teacher','section_list',)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

steam搬砖项目赚钱吗?操作流程看这一篇就够了

很多人应该听说过steam,它是国外一款知名的游戏社交平台,也是目前世界上最大的游戏平台之一。而steam搬砖项目,关键就是靠信息差。我们要做的就是在steam以低价买入道具装备,然后上架到网易buff卖出,赚取差价。 什么人…

【Mapstruct】MapStruct实战:简化Java Bean映射

虽然早就在用mapstruct了,但因为要快速原型开发,天天写builder模式,感觉太长了,不好看,(然后最近被同事说丑了 ),感觉还是做个总结,怒转mapstruct 问题背景或前提知识 …

【PLC一体机】PLC一体机中如何实现触摸屏和PC电脑的通讯

博主今天准备把之前买的PLC一体机拿出来玩一下,翻看以前的博文,发现没有记录分享PLC一体机中如何实现触摸屏程序下载的内容。 如之前博文介绍的那样,PLC一体机由PLC和触摸屏两部分集成的设备,因此设备内部已经做好了PLC和触摸屏之…

C++拷贝构造函数、赋值运算符重载

1.拷贝构造函数 拷贝构造函数的写法如图所示 调用方式如下 接下来我来说说它的特征 1.1特征 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函…

【SpringBoot1】Spring Boot是如何推断你的工程类型的

我们的工程一般都是基于java的Servlet的,但是除此之外还有其他类型的, 在WebApplicationType里定义了常见的类型: public enum WebApplicationType {/*** The application should not run as a web application and should not start an* e…

XGB-2: Boosted Trees(提升树)简介

XGBoost代表“Extreme Gradient Boosting”,其中术语“Gradient Boosting”来源于Friedman的论文《Greedy Function Approximation: A Gradient Boosting Machine》。 梯度提升树已经存在一段时间,关于这个主题有很多资料。本部分将使用监督学习的元素&…

【Chrono Engine学习总结】1-安装配置与程序运行

本文仅用于个人安装记录。 官方安装教程 https://api.projectchrono.org/8.0.0/tutorial_install_chrono.html Windows下安装 windows下安装就按照教程好了。采用cmake-gui进行配置,建议首次安装只安装核心模块。然后依此configure下irrlicht,sensor…

6款超好用的IDEA插件,开发必备!

今天给大家介绍几款开发必备的IDEA插件: JRebel 热部署插件,让你在修改完代码后,不用再重新启动,很实用!但是,不是免费的,需要大家继续发挥下自己的聪明才智才能happy的使用 Json Parser 厌倦…

Vivado Tri-MAC IP端口说明

Trri-mac Ethernet IP端口详细说明 序号 Signal Name Direction Description 备注 Clock,Reset Definition 1 gtx_clk I MAC IP全局时钟输入,125MHz。使用时输入125MHz全局时钟。 2 refclk I MAC IP参考时钟输入,200MHz,该时钟用…

每周AI新闻(2024年第5周)ChatGPT等多应用登陆 Vision Pro | 字节Coze国内版上线等

我是陌小北,一个正在研究硅基生命的、有趣儿的碳基生命。每周日20:00,准时解读每周AI大事件。 大厂动向 【1】ChatGPT、钉钉、Firefly AI 登陆 Vision Pro OpenAI发布了新的ChatGPT App,允许Apple Vision Pro用户与GPT-4 Turbo模型进行自然…

Abp 从空白的WebApplication中添加EntityFrameworkCore生成数据库

书接上文:Abp 从空白WebApplication开始 开发环境:.NET6、Volo.Abp 数据库:Sqlite 说明:纯属个人强行入门。我个人觉得按照官网的操作不舒服,所以自己研究着来,请读者根据自己的需要进行参考。我能保证的…

Ubuntu+GPU搭建Stable-Diffusion教程

【前序】已经安装anaconda 1.git拉取项目到本地 执行git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 进入项目目录下 cd stable-diffusion-webui/ 2. 安装对应Python依赖包 首先安装pytorch和torchvision,若是GPU环境的用户需要安装与cu…

2024年最新幻兽帕鲁服务器搭建教程

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

Day59 单调栈part02 503. 下一个更大元素 II 42. 接雨水

Day59 单调栈part02 503. 下一个更大元素 II 42. 接雨水 503. 下一个更大元素 II class Solution { public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> result(nums.size(),-1); stack<int> st;st.push(0);for(int i 1;…

深度解析源码,Spring 如何使用三级缓存解决循环依赖

目录 一. 前言 二. 基础知识 2.1. 什么是循环依赖&#xff1f; 2.2. 三级缓存 2.3. 原理执行流程 三. 源码解读 3.1. 代码入口 3.2. 第一层 3.3. 第二层 3.4. 第三层 3.5. 返回第二层 3.6. 返回第一层 四. 原理深度解读 4.1. 什么要有三级缓存&#xff1f; 4.2.…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

python中[[]] * (n)和[[] for _ in range(n)]的区别

1、现象 刷leetcode207的时候碰到一个坑&#xff0c;用[[]] * (n)初始化二维数组&#xff0c;逻辑是正确的&#xff0c;但是结果始终不对。 2、原因 最后定位是初始化语句使用错误导致的&#xff0c;我使用的是[[]] * (n)&#xff0c;应该使用[[] for _ in range(n)] 3、解…

Stable Diffusion 模型下载:ReV Animated

模型介绍 该模型能够创建 2.5D 类图像生成。此模型是检查点合并&#xff0c;这意味着它是其他模型的产物&#xff0c;以创建从原始模型派生的产品。 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者s6yx文件名称revAnimated_v122EOL.safetensors文件大小5.13GB 生成案例 …

redis数据库设置对象的过期时间,到期后自动删除该条数据

redis数据库设置对象的过期时间,到期后自动删除该条数据&#xff01;过期时间的事情经常发生。比如大家领到了一些购物券。这张购物券有一个过期时间。必须在某节点之前&#xff08;某年某月末日&#xff09;之前&#xff0c;使用掉&#xff0c;否则该券就会过期&#xff0c;无…

Ruby详解及安装流程

文章目录 一、Ruby详解二、Ruby安装流程三、Ruby案例四、Ruby常见问题五、Ruby优缺点六、热门文章 一、Ruby详解 Ruby是一种高级编程语言&#xff0c;具有简单易学、灵活多变、优雅美丽的语法特点。它是一种面向对象的编程语言&#xff0c;具有动态类型和解释型语言的特性。在…