不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • python基础

  • python模块

  • django

  • flask

  • SYL

    • day01

    • day02

    • day03

    • day04

    • day05

    • day06

      • 00.作业
      • 01.课程模块表结构分析
      • 02.创建课程app
      • 03.增加抽象基类
      • 04.课程相关5张表设计
      • 05.增加media文件配置
      • 06.课程主页面三个接口开发
        • 06.课程添加关注接口
        • 08.章节页面接口开发
        • 09.视频播放页面接口开发
      • day07

      • day08

      • day09

      • day10

      • day11

      • day12

    • Celery

    • 微服务

    • python
    • SYL
    • day06
    xiaonaiqiang
    2021-03-10
    目录

    06.课程主页面三个接口开发

    # 0.课程主页面接口对应页面效果

    # 1.课程类别接口开发

    # 1.1 course/urls.py添加路由

    from django.urls import path, re_path
    from rest_framework.routers import DefaultRouter    # 导入DRF得DefaultRouter
    
    from . import views
    
    router = DefaultRouter()  # 有根路由
    router.register(r'type', views.CourseTypeViewSet)   # 写路由
    
    urlpatterns = [
    
    ]
    
    urlpatterns += router.urls                          # 把两个路由列表相加
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # 1.2 course/serializers.py写序列化器

    from rest_framework import serializers
    from course.models import CourseType
    
    
    class CourseTypeSerializer(serializers.ModelSerializer):
        class Meta:
            model = CourseType
            fields = '__all__'
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 1.3course/views.py添加视图函数

    from rest_framework import viewsets
    from rest_framework.pagination import PageNumberPagination
    
    from course.models import *
    from course.serializers import *
    
    
    class PageNum(PageNumberPagination):
        page_size_query_param = 'page_size'
    
    
    class CourseTypeViewSet(viewsets.ModelViewSet):
        queryset = CourseType.objects.all()
        serializer_class = CourseTypeSerializer
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 1.4 course/admin.py注册后台管理

    from django.contrib import admin
    from . import models
    
    admin.site.register(models.CourseType)
    
    1
    2
    3
    4

    # 1.5 测试接口

    Http://192.168.56.100:8888/course/type/
    
    1

    # 2.标签接口开发

    # 2.1 course/urls.py添加路由

    router.register(r'tag', views.CourseTagViewSet)
    
    1

    # 2.2 course/serializers.py写序列化器

    from rest_framework import serializers
    from course.models import CourseTag
    
    class CourseTagSerializer(serializers.ModelSerializer):
        class Meta:
            model = CourseTag
            fields = '__all__'
    
    1
    2
    3
    4
    5
    6
    7

    # 2.3course/views.py添加视图函数

    from course.models import *
    from course.serializers import *
    
    class CourseTagViewSet(viewsets.ModelViewSet):
        queryset = CourseTag.objects.all()
        serializer_class = CourseTagSerializer
    
    1
    2
    3
    4
    5
    6

    # 1.4 course/admin.py注册后台管理

    from django.contrib import admin
    from . import models
    
    admin.site.register(models.CourseTag)
    
    1
    2
    3
    4

    # 1.5 测试接口

    Http://192.168.56.100:8888/course/tag/
    
    1

    # 3.课程接口开发

    # 3.1 course/urls.py添加路由

    router.register(r'course', views.CourseViewSet)
    
    1

    # 3.2 course/serializers.py写序列化器

    # -*- coding: utf-8 -*-
    from rest_framework import serializers
    from course.models import *
    
    
    class CourseSerializer(serializers.ModelSerializer):
        class Meta:
            model = Course
            fields = '__all__'  # 所有字段
    
    
    class SectionsSerializer(serializers.ModelSerializer):
        class Meta:
            model = Sections
            fields = '__all__'
    
    
    class ChaptersSerializer(serializers.ModelSerializer):
        sections = SectionsSerializer(many=True)
    
        class Meta:
            model = Chapters
            fields = '__all__'
    
    
    class CourseDeepSerializer(CourseSerializer):
        # 字段名名, 必须是模型可以 . 引用到的变量
        # Course().   "chapters"  才能作为字段名,  如果是集合, 需要加many=True,
        chapters = ChaptersSerializer(many=True)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29

    # 3.3course/views.py添加视图函数

    from django.shortcuts import render
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework import viewsets
    from rest_framework.filters import OrderingFilter
    from rest_framework.pagination import PageNumberPagination
    
    from course.models import *
    from course.serializers import *
    
    
    class CourseViewSet(viewsets.ModelViewSet):
        queryset = Course.objects.all()
        serializer_class = CourseDeepSerializer
    
        # 指定过滤方法类, 排序方法类, 一个或多个
        filter_backends = (DjangoFilterBackend, OrderingFilter)  # 同时支持过滤和排序
    
        # 指定排序字段, 不设置, 排序功能不起效
        ordering_fields = ('attention', 'learner', 'create_time')
    
        # 指定过滤字段, 不设置, 过滤功能不起效
        filter_fields = ('title', 'desc', 'status', 'course_type', 'course_tag')
    
        # 自定义分页器 覆盖全局配置
        pagination_class = PageNum
    
        def get_serializer_class(self):
            if self.action == 'list':
                return CourseSerializer
            else:
                return CourseDeepSerializer
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

    # 3.4 course/admin.py注册后台管理

    from django.contrib import admin
    from . import models
    
    admin.site.register(models.Course)
    
    1
    2
    3
    4

    # 3.5 测试接口

    Http://192.168.56.100:8888/course/course/
    
    1

    上次更新: 2024/3/13 15:35:10
    05.增加media文件配置
    06.课程添加关注接口

    ← 05.增加media文件配置 06.课程添加关注接口→

    最近更新
    01
    04.数组双指针排序_子数组
    03-25
    02
    08.动态规划
    03-25
    03
    06.回溯算法
    03-25
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式