课程列表接口,课程详情接口()

先在models中建几张表结构:

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation

# Create your models here.
# class CourseType(models.Model):
#     type_name = models.CharField(verbose_name=‘课程类别‘,max_length=32)
# class Course(models.Model):
#     title = models.CharField(verbose_name=‘课程名称‘,max_length=32)
#     course_info = models.CharField(verbose_name=‘课程描述‘,max_length=128)
#     student_num = models.IntegerField()
#     choice = ((1,‘初级‘),(2,‘中级‘),(3,‘高级‘))
#     student_level = models.IntegerField(verbose_name=‘级别‘,choices=choice)
#     course_price = models.IntegerField()
# class CourseDetail(models.Model):
#     course = models.OneToOneField(to=‘Course‘)
#     contents = models.CharField(verbose_name=‘所学内容‘,max_length=128)
#     time = models.CharField(verbose_name=‘时长‘,max_length=32)
#     choice = ((1, ‘初级‘), (2, ‘中级‘), (3, ‘高级‘))
#     student_level = models.IntegerField(verbose_name=‘级别‘, choices=choice)
#     student_num = models.IntegerField()
#     score = models.IntegerField()
#     recommended_courses = models.CharField(verbose_name=‘推荐课程‘,max_length=32)
# class Price(models.Model):
#     old_price = models.IntegerField(verbose_name=‘原价‘)
#     now_price = models.IntegerField(verbose_name=‘现价‘)
#     content_type = models.ForeignKey(to=ContentType)
#     object_id = models.PositiveIntegerField()
#     content_object = GenericForeignKey("content_type", "object_id")
# class CourseChapter(models.Model):
#     course_detail = models.ForeignKey(to=‘CourseDetail‘)
#
# class ClassHours(models.Model):
#     course_chapter = models.OneToOneField(to=‘CourseChapter‘)
#
# class questions(models.Model):
#     content_type = models.ForeignKey(to=ContentType)
#     object_id = models.PositiveIntegerField()
#     content_object = GenericForeignKey("content_type", "object_id")
# class teacher(models.Model):
#     name = models.CharField(verbose_name=‘姓名‘,max_length=32)
#     choice = ((1,‘男‘),(2,‘女‘))
#     sex = models.IntegerField(verbose_name=‘性别‘,choices=choice)
class Course(models.Model):
    """专题课程"""

    name = models.CharField(max_length=128, unique=True)
    course_img = models.CharField(max_length=255)
    brief = models.TextField(verbose_name="课程概述", max_length=2048)

    level_choices = ((0, ‘初级‘), (1, ‘中级‘), (2, ‘高级‘))
    level = models.SmallIntegerField(choices=level_choices, default=1)
    pub_date = models.DateField(verbose_name="发布日期", blank=True, null=True)
    period = models.PositiveIntegerField(verbose_name="建议学习周期(days)", default=7)
    order = models.IntegerField("课程顺序", help_text="从上一个课程数字往后排")

    status_choices = ((0, ‘上线‘), (1, ‘下线‘), (2, ‘预上线‘))
    status = models.SmallIntegerField(choices=status_choices, default=0)
    # 用于GenericForeignKey反向查询,不会生成表字段,切勿删除
    price_policy = GenericRelation("PricePolicy")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "专题课"

class CourseDetail(models.Model):
    """课程详情页内容"""
    course = models.OneToOneField("Course", on_delete=models.CASCADE)
    hours = models.IntegerField("课时")
    # 课程的标语 口号
    course_slogan = models.CharField(max_length=125, blank=True, null=True)
    # video_brief_link = models.CharField(verbose_name=‘课程介绍‘, max_length=255, blank=True, null=True)
    # why_study = models.TextField(verbose_name="为什么学习这门课程")
    # what_to_study_brief = models.TextField(verbose_name="我将学到哪些内容")
    # career_improvement = models.TextField(verbose_name="此项目如何有助于我的职业生涯")
    # prerequisite = models.TextField(verbose_name="课程先修要求", max_length=1024)
    # 推荐课程
    recommend_courses = models.ManyToManyField("Course", related_name="recommend_by", blank=True)
    teachers = models.ManyToManyField("Teacher", verbose_name="课程讲师")

    def __str__(self):
        return "%s" % self.course

    class Meta:
        verbose_name_plural = "课程详细"

class PricePolicy(models.Model):
    """价格与有课程效期表"""
    price = models.FloatField()

    # course = models.ForeignKey("Course")
    valid_period_choices = ((1, ‘1天‘), (3, ‘3天‘),
                            (7, ‘1周‘), (14, ‘2周‘),
                            (30, ‘1个月‘),
                            (60, ‘2个月‘),
                            (90, ‘3个月‘),
                            (180, ‘6个月‘), (210, ‘12个月‘),
                            (540, ‘18个月‘), (720, ‘24个月‘),
                            )
    valid_period = models.SmallIntegerField(choices=valid_period_choices)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)  # 关联course or degree_course
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey(‘content_type‘, ‘object_id‘)

    class Meta:
        unique_together = ("content_type", ‘object_id‘, "valid_period")
        verbose_name_plural = "价格策略"

    def __str__(self):
        return "%s(%s)%s" % (self.content_object, self.get_valid_period_display(), self.price)

class Teacher(models.Model):
    """讲师、导师表"""
    name = models.CharField(max_length=32)
    image = models.CharField(max_length=128)
    brief = models.TextField(max_length=1024)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "讲师"

数据库迁移后录入数据:

前端发送axios请求:

原文地址:https://www.cnblogs.com/yb635238477/p/9709966.html

时间: 2024-11-08 23:01:41

课程列表接口,课程详情接口()的相关文章

全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口

通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下几个接口: 获取书籍详情信息 获取用户对书籍的喜欢状态接口 喜欢/不喜欢书籍接口 获取评论列表 写评论接口 以上的接口,有的数据可以直接从已存在的数据表中去获取,比如:书籍详情信息,而其他新接口就需要创建对应的model,然后根据model创建相应的数据表. 比如 用户对书籍的喜欢操作,可以创建li

WebCast课程列表2

http://www.cnblogs.com/hhq80/archive/2007/02/28/659490.html WebCast课程列表2,布布扣,bubuko.com

贴子详情接口偶发时延超过2s的问题

1. 发现问题 1. 查询慢access日志,发现偶尔有接口时延超过2s,发送概率1%左右 2. 排查 1. 写单元测试,多次测试后,不能重现问题 2. 接口代码里加日志,每隔一行代码加一次日志,等待重现 3. 不断往上游接口加日志后,发现耗时在获取榜单top10的接口 4. top10接口是从数据库获取top50的用户,然后通过多协程到redis里面获取用户信息 5. 发现从数据库获取数据时,没索引,加上索引后,问题依然存在 6. 再次加日志后发现耗时在多协程到redis里面获取用户信息 7.

Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set是并列的. Collections.sort() 排序方法,实现对List对象中的元素进行排序. package com.test.collection; import java.util.ArrayList; import java.util.Collections; import java.ut

Java基础之集合框架(Collection接口和List接口)

首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素: 例如:做广播操的时候,可以将学生插入到某排某列,反之也可以叫某排某列中的学生出列. 4.有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型. 例如:在吃饭的时候,众多铝饭盒中如何区别是自己的呢?在饭盒上刻独有的标志或贴纸条,这个标志和

通过HttpWebRequest请求与HttpWebResponse响应方式发布接口与访问接口

一.API接口的编码 1.首页的页面代码: protected void Page_Load(object sender, EventArgs e) { /* * 请求路径:http://xxxx/index.aspx?appkey=&security=&t=&method=&... * appkey是调用者身份码(系统分配) * security是当前请求安全码(安全码=MD5(Key + Method),key为系统分配或调用者自行设定) * t是请求模块(Member

用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写

说明 结束连续几天的加班,最近的项目终于告一段落,今天抽点时间开始继续写我这篇拖了很久的<用weexplus从0到1写一个app>系列文章.写这篇文章的时候,weexplus的作者已经把weexplus重构了一下,可以同时打包出web端和native端,我这边的ui界面和项目结构也跟着做了一点变化.这里有weexplus官方放出的一个电影APP的demo,有需要的可以去下载看看,然后顺便给weexplus一个star吧! 文章可能会很长,在此分几篇文章来写,先占个坑: 用weexplus从0到

element ui源码解析 -- Pagination篇( 副:列表页进入详情页再返回后,如何保持当前页码正确 )

之所以看Pagination源码,由于一个问题: 需求:从列表页进入详情页后再返回,需求方希望保持在当前的页码而不是重新定位到第一页 问题:按照element ui文档设置current-page后请求的数据正常,但pagination的页码显示却不正确,不管current-page值等于多少,永远显示第一页 解决方案: 1. 改 :current-page="currentPage" 为 :current-page.sync="currentPage" 2.查询接

Comparable接口与Comparator接口的比较————总结

之前的两篇文章主要学习了Comparable接口和Comparator接口的学习.既然已经学习完了,现在就趁热打铁,进行总结吧! Comparable接口和Comparator接口的共同点: 1. 都是为了进行排序.(废话,当然都是进行排序了!!!嘿嘿,大家都能看出来,不过还是写下来了!) 2. 都是接口.(额..又是废话) 除此之外,小编想不出还有什么共同点了!想到了其他的相同点可以在文章下方留言,大家一起学习! 相同点说完了,接下来就是不同点啦. Comparable接口与Comparato

java.util (Collection接口和Map接口)

1:Collection和Map接口的几个主要继承和实现类                  1.1  Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set. 如