日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

06 路飞学城表结构:课程系列

發(fā)布時(shí)間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 06 路飞学城表结构:课程系列 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、課程

1、課程models

    - 課程(13)
        課程大類
        課程子類
        學(xué)位課 
            講師
            獎(jiǎng)勵(lì)
        專題課(學(xué)位課模塊表)
        價(jià)格策略(ContentType)
        課程詳細(xì)(o2o 水平分表)
        常見問題
        課程大綱
        章節(jié)
        課時(shí)
        作業(yè)

from django.db import models


# Create your models here.

class Chapter(models.Model):
    """
    章節(jié)
    """
    num = models.IntegerField(verbose_name='章節(jié)')
    name = models.CharField(verbose_name='章節(jié)名稱', max_length=32, blank=True, null=True)
    course = models.ForeignKey(verbose_name="所屬課程", to='Course', on_delete=models.CASCADE)

    def __str__(self):
        return self.name


from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.db.models import Q
from django.utils.safestring import mark_safe
from django.db import models
import hashlib


class CourseCategory(models.Model):
    """課程大類, e.g 前端  后端..."""
    name = models.CharField(max_length=64, unique=True)

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

    class Meta:
        verbose_name_plural = "01.課程大類"


class CourseSubCategory(models.Model):
    """課程子類, e.g python linux """
    category = models.ForeignKey("CourseCategory", on_delete=models.CASCADE)
    name = models.CharField(max_length=64, unique=True)

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

    class Meta:
        verbose_name_plural = "02.課程子類"


class DegreeCourse(models.Model):
    """學(xué)位課程"""
    name = models.CharField(max_length=128, unique=True)
    course_img = models.CharField(max_length=255, verbose_name="縮略圖")
    brief = models.TextField(verbose_name="學(xué)位課程簡(jiǎn)介", blank=True, null=True)
    total_scholarship = models.PositiveIntegerField(verbose_name="總獎(jiǎng)學(xué)金(貝里)", default=40000)
    mentor_compensation_bonus = models.PositiveIntegerField(verbose_name="本課程的導(dǎo)師輔導(dǎo)費(fèi)用(貝里)", default=15000)
    period = models.PositiveIntegerField(verbose_name="建議學(xué)習(xí)周期(days)", default=150)  # 為了計(jì)算學(xué)位獎(jiǎng)學(xué)金
    prerequisite = models.TextField(verbose_name="課程先修要求", max_length=1024)
    teachers = models.ManyToManyField("Teacher", verbose_name="課程講師")

    # 用于GenericForeignKey反向查詢, 不會(huì)生成表字段,切勿刪除
    # coupon = GenericRelation("Coupon")

    # 用于GenericForeignKey反向查詢,不會(huì)生成表字段,切勿刪除
    degreecourse_price_policy = GenericRelation("PricePolicy")

    # 查詢常見問題
    asked_question = GenericRelation("OftenAskedQuestion")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "03.學(xué)位課"


class Teacher(models.Model):
    """講師、導(dǎo)師表"""
    name = models.CharField(max_length=32)
    role_choices = ((0, '講師'), (1, '導(dǎo)師'))
    role = models.SmallIntegerField(choices=role_choices, default=0)
    title = models.CharField(max_length=64, verbose_name="職位、職稱")
    signature = models.CharField(max_length=255, help_text="導(dǎo)師簽名", blank=True, null=True)
    image = models.CharField(max_length=128)
    brief = models.TextField(max_length=1024, blank=True, null=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "04.導(dǎo)師或講師"


class Scholarship(models.Model):
    """學(xué)位課程獎(jiǎng)學(xué)金"""
    degree_course = models.ForeignKey("DegreeCourse", on_delete=models.CASCADE)
    time_percent = models.PositiveSmallIntegerField(verbose_name="獎(jiǎng)勵(lì)檔位(時(shí)間百分比)", help_text="只填百分值,如80,代表80%")
    value = models.PositiveIntegerField(verbose_name="獎(jiǎng)學(xué)金數(shù)額")

    def __str__(self):
        return "%s:%s" % (self.degree_course, self.value)

    class Meta:
        verbose_name_plural = "05.學(xué)位課獎(jiǎng)學(xué)金"


class Course(models.Model):
    """專題課程 OR 學(xué)位課模塊"""
    name = models.CharField(max_length=128, unique=True)  # Python基礎(chǔ)
    course_img = models.CharField(max_length=255)

    sub_category = models.ForeignKey("CourseSubCategory", on_delete=models.CASCADE)  #

    course_type_choices = ((0, '付費(fèi)'), (1, 'VIP專享'), (2, '學(xué)位課程'))
    course_type = models.SmallIntegerField(choices=course_type_choices, blank=True, null=True)

    degree_course = models.ForeignKey("DegreeCourse", blank=True, null=True, help_text="若是學(xué)位課程,此處關(guān)聯(lián)學(xué)位表", on_delete=models.CASCADE)

    brief = models.TextField(verbose_name="課程(模塊)概述", max_length=2048, blank=True, null=True)
    level_choices = ((0, '初級(jí)'), (1, '中級(jí)'), (2, '高級(jí)'))
    level = models.SmallIntegerField(choices=level_choices, default=1)
    pub_date = models.DateField(verbose_name="發(fā)布日期", blank=True, null=True)
    period = models.PositiveIntegerField(verbose_name="建議學(xué)習(xí)周期(days)", default=7)
    order = models.IntegerField("課程順序", help_text="從上一個(gè)課程數(shù)字往后排")
    attachment_path = models.CharField(max_length=128, verbose_name="課件路徑", blank=True, null=True)
    status_choices = ((0, '上線'), (1, '下線'), (2, '預(yù)上線'))
    status = models.SmallIntegerField(choices=status_choices, default=0)
    template_id = models.SmallIntegerField("前端模板id", default=1)

    # 如果是專題課時(shí),獲取相關(guān)優(yōu)惠券
    # coupon = GenericRelation("Coupon")

    # 用于GenericForeignKey反向查詢,不會(huì)生成表字段,切勿刪除
    price_policy = GenericRelation("PricePolicy")

    # 查詢常見問題
    asked_question = GenericRelation("OftenAskedQuestion")


class CourseDetail(models.Model):
    """課程詳情頁(yè)內(nèi)容"""
    course = models.OneToOneField("Course", on_delete=models.CASCADE)
    hours = models.IntegerField("課時(shí)")
    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="為什么學(xué)習(xí)這門課程")
    what_to_study_brief = models.TextField(verbose_name="我將學(xué)到哪些內(nèi)容")
    career_improvement = models.TextField(verbose_name="此項(xiàng)目如何有助于我的職業(yè)生涯")
    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 = "07.課程或?qū)W位模塊詳細(xì)"


class OftenAskedQuestion(models.Model):
    """常見問題"""
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)  # 關(guān)聯(lián)course or degree_course
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

    question = models.CharField(max_length=255)
    answer = models.TextField(max_length=1024)

    def __str__(self):
        return "%s-%s" % (self.content_object, self.question)

    class Meta:
        unique_together = ('content_type', 'object_id', 'question')
        verbose_name_plural = "08. 常見問題"


class CourseOutline(models.Model):
    """課程大綱"""
    course_detail = models.ForeignKey("CourseDetail", on_delete=models.CASCADE)

    # 前端顯示順序
    order = models.PositiveSmallIntegerField(default=1)

    title = models.CharField(max_length=128)
    content = models.TextField("內(nèi)容", max_length=2048)

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

    class Meta:
        unique_together = ('course_detail', 'title')
        verbose_name_plural = "09. 課程大綱"


class CourseChapter(models.Model):
    """課程章節(jié)"""
    course = models.ForeignKey("Course", related_name='coursechapters', on_delete=models.CASCADE)
    chapter = models.SmallIntegerField(verbose_name="第幾章", default=1)
    name = models.CharField(max_length=128)
    summary = models.TextField(verbose_name="章節(jié)介紹", blank=True, null=True)
    pub_date = models.DateField(verbose_name="發(fā)布日期", auto_now_add=True)

    class Meta:
        unique_together = ("course", 'chapter')
        verbose_name_plural = "10. 課程章節(jié)"

    def __str__(self):
        return "%s:(第%s章)%s" % (self.course, self.chapter, self.name)


class CourseSection(models.Model):
    """課時(shí)目錄"""
    chapter = models.ForeignKey("CourseChapter", related_name='coursesections', on_delete=models.CASCADE)
    name = models.CharField(max_length=128)
    order = models.PositiveSmallIntegerField(verbose_name="課時(shí)排序", help_text="建議每個(gè)課時(shí)之間空1至2個(gè)值,以備后續(xù)插入課時(shí)")
    section_type_choices = ((0, '文檔'), (1, '練習(xí)'), (2, '視頻'))
    section_type = models.SmallIntegerField(default=2, choices=section_type_choices)
    # 59EE3275E977AADB9C33DC5901307461
    section_link = models.CharField(max_length=255, blank=True, null=True, help_text="若是video,填vid,若是文檔,填link")

    video_time = models.CharField(verbose_name="視頻時(shí)長(zhǎng)", blank=True, null=True, max_length=32)  # 僅在前端展示使用
    pub_date = models.DateTimeField(verbose_name="發(fā)布時(shí)間", auto_now_add=True)
    free_trail = models.BooleanField("是否可試看", default=False)

    class Meta:
        unique_together = ('chapter', 'section_link')
        verbose_name_plural = "11. 課時(shí)"

    def __str__(self):
        return "%s-%s" % (self.chapter, self.name)


class Homework(models.Model):
    chapter = models.ForeignKey("CourseChapter", on_delete=models.CASCADE)
    title = models.CharField(max_length=128, verbose_name="作業(yè)題目")
    order = models.PositiveSmallIntegerField("作業(yè)順序", help_text="同一課程的每個(gè)作業(yè)之前的order值間隔1-2個(gè)數(shù)")
    homework_type_choices = ((0, '作業(yè)'), (1, '模塊通關(guān)考核'))
    homework_type = models.SmallIntegerField(choices=homework_type_choices, default=0)
    requirement = models.TextField(max_length=1024, verbose_name="作業(yè)需求")
    threshold = models.TextField(max_length=1024, verbose_name="踩分點(diǎn)")
    recommend_period = models.PositiveSmallIntegerField("推薦完成周期(天)", default=7)
    scholarship_value = models.PositiveSmallIntegerField("為該作業(yè)分配的獎(jiǎng)學(xué)金(貝里)")
    note = models.TextField(blank=True, null=True)
    enabled = models.BooleanField(default=True, help_text="本作業(yè)如果后期不需要了,不想讓學(xué)員看到,可以設(shè)置為False")

    class Meta:
        unique_together = ("chapter", "title")
        verbose_name_plural = "12. 章節(jié)作業(yè)"

    def __str__(self):
        return "%s - %s" % (self.chapter, self.title)


#
# class CourseReview(models.Model):
#     """課程評(píng)價(jià)"""
#     enrolled_course = models.OneToOneField("EnrolledCourse")
#     about_teacher = models.FloatField(default=0, verbose_name="講師講解是否清晰")
#     about_video = models.FloatField(default=0, verbose_name="內(nèi)容實(shí)用")
#     about_course = models.FloatField(default=0, verbose_name="課程內(nèi)容通俗易懂")
#     review = models.TextField(max_length=1024, verbose_name="評(píng)價(jià)")
#     disagree_number = models.IntegerField(default=0, verbose_name="踩")
#     agree_number = models.IntegerField(default=0, verbose_name="贊同數(shù)")
#     tags = models.ManyToManyField("Tags", blank=True, verbose_name="標(biāo)簽")
#     date = models.DateTimeField(auto_now_add=True, verbose_name="評(píng)價(jià)日期")
#     is_recommend = models.BooleanField("熱評(píng)推薦", default=False)
#     hide = models.BooleanField("不在前端頁(yè)面顯示此條評(píng)價(jià)", default=False)
#
#     def __str__(self):
#         return "%s-%s" % (self.enrolled_course.course, self.review)
#
#     class Meta:
#         verbose_name_plural = "13. 課程評(píng)價(jià)(購(gòu)買課程后才能評(píng)價(jià))"
#
#
# class DegreeCourseReview(models.Model):
#     """學(xué)位課程評(píng)價(jià)
#     為了以后可以定制單獨(dú)的評(píng)價(jià)內(nèi)容,所以不與普通課程的評(píng)價(jià)混在一起,單獨(dú)建表
#     """
#     enrolled_course = models.ForeignKey("EnrolledDegreeCourse")
#     course = models.ForeignKey("Course", verbose_name="評(píng)價(jià)學(xué)位模塊", blank=True, null=True,
#                                help_text="不填寫即代表評(píng)價(jià)整個(gè)學(xué)位課程", limit_choices_to={'course_type': 2})
#     about_teacher = models.FloatField(default=0, verbose_name="講師講解是否清晰")
#     about_video = models.FloatField(default=0, verbose_name="視頻質(zhì)量")
#     about_course = models.FloatField(default=0, verbose_name="課程")
#     review = models.TextField(max_length=1024, verbose_name="評(píng)價(jià)")
#     disagree_number = models.IntegerField(default=0, verbose_name="踩")
#     agree_number = models.IntegerField(default=0, verbose_name="贊同數(shù)")
#     tags = models.ManyToManyField("Tags", blank=True, verbose_name="標(biāo)簽")
#     date = models.DateTimeField(auto_now_add=True, verbose_name="評(píng)價(jià)日期")
#     is_recommend = models.BooleanField("熱評(píng)推薦", default=False)
#     hide = models.BooleanField("不在前端頁(yè)面顯示此條評(píng)價(jià)", default=False)
#
#     def __str__(self):
#         return "%s-%s" % (self.enrolled_course, self.review)
#
#     class Meta:
#         verbose_name_plural = "14. 學(xué)位課評(píng)價(jià)(購(gòu)買課程后才能評(píng)價(jià))"
#

class PricePolicy(models.Model):
    """價(jià)格與有課程效期表"""
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)  # 關(guān)聯(lián)course or degree_course
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

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

    class Meta:
        unique_together = ("content_type", 'object_id', "valid_period")
        verbose_name_plural = "15. 價(jià)格策略"

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

2、cc視頻賬號(hào)

HTML源碼

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

    <a >點(diǎn)擊播放</a>
</body>
</html>

3、作業(yè)

4、生成數(shù)據(jù)文件,導(dǎo)入數(shù)據(jù)表

$ python manage.py makemigrations

$ python manage.py migrate

添加數(shù)據(jù)

5、訪問 course,coiurse/1/

總結(jié)

以上是生活随笔為你收集整理的06 路飞学城表结构:课程系列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。