06 路飞学城表结构:课程系列
生活随笔
收集整理的這篇文章主要介紹了
06 路飞学城表结构:课程系列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、課程
1、課程models
- 課程(13)
課程大類
課程子類
學位課
講師
獎勵
專題課(學位課模塊表)
價格策略(ContentType)
課程詳細(o2o 水平分表)
常見問題
課程大綱
章節
課時
作業
from django.db import models
# Create your models here.
class Chapter(models.Model):
"""
章節
"""
num = models.IntegerField(verbose_name='章節')
name = models.CharField(verbose_name='章節名稱', 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):
"""學位課程"""
name = models.CharField(max_length=128, unique=True)
course_img = models.CharField(max_length=255, verbose_name="縮略圖")
brief = models.TextField(verbose_name="學位課程簡介", blank=True, null=True)
total_scholarship = models.PositiveIntegerField(verbose_name="總獎學金(貝里)", default=40000)
mentor_compensation_bonus = models.PositiveIntegerField(verbose_name="本課程的導師輔導費用(貝里)", default=15000)
period = models.PositiveIntegerField(verbose_name="建議學習周期(days)", default=150) # 為了計算學位獎學金
prerequisite = models.TextField(verbose_name="課程先修要求", max_length=1024)
teachers = models.ManyToManyField("Teacher", verbose_name="課程講師")
# 用于GenericForeignKey反向查詢, 不會生成表字段,切勿刪除
# coupon = GenericRelation("Coupon")
# 用于GenericForeignKey反向查詢,不會生成表字段,切勿刪除
degreecourse_price_policy = GenericRelation("PricePolicy")
# 查詢常見問題
asked_question = GenericRelation("OftenAskedQuestion")
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "03.學位課"
class Teacher(models.Model):
"""講師、導師表"""
name = models.CharField(max_length=32)
role_choices = ((0, '講師'), (1, '導師'))
role = models.SmallIntegerField(choices=role_choices, default=0)
title = models.CharField(max_length=64, verbose_name="職位、職稱")
signature = models.CharField(max_length=255, help_text="導師簽名", 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.導師或講師"
class Scholarship(models.Model):
"""學位課程獎學金"""
degree_course = models.ForeignKey("DegreeCourse", on_delete=models.CASCADE)
time_percent = models.PositiveSmallIntegerField(verbose_name="獎勵檔位(時間百分比)", help_text="只填百分值,如80,代表80%")
value = models.PositiveIntegerField(verbose_name="獎學金數額")
def __str__(self):
return "%s:%s" % (self.degree_course, self.value)
class Meta:
verbose_name_plural = "05.學位課獎學金"
class Course(models.Model):
"""專題課程 OR 學位課模塊"""
name = models.CharField(max_length=128, unique=True) # Python基礎
course_img = models.CharField(max_length=255)
sub_category = models.ForeignKey("CourseSubCategory", on_delete=models.CASCADE) #
course_type_choices = ((0, '付費'), (1, 'VIP專享'), (2, '學位課程'))
course_type = models.SmallIntegerField(choices=course_type_choices, blank=True, null=True)
degree_course = models.ForeignKey("DegreeCourse", blank=True, null=True, help_text="若是學位課程,此處關聯學位表", on_delete=models.CASCADE)
brief = models.TextField(verbose_name="課程(模塊)概述", max_length=2048, blank=True, null=True)
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="從上一個課程數字往后排")
attachment_path = models.CharField(max_length=128, verbose_name="課件路徑", blank=True, null=True)
status_choices = ((0, '上線'), (1, '下線'), (2, '預上線'))
status = models.SmallIntegerField(choices=status_choices, default=0)
template_id = models.SmallIntegerField("前端模板id", default=1)
# 如果是專題課時,獲取相關優惠券
# coupon = GenericRelation("Coupon")
# 用于GenericForeignKey反向查詢,不會生成表字段,切勿刪除
price_policy = GenericRelation("PricePolicy")
# 查詢常見問題
asked_question = GenericRelation("OftenAskedQuestion")
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 = "07.課程或學位模塊詳細"
class OftenAskedQuestion(models.Model):
"""常見問題"""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # 關聯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("內容", 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):
"""課程章節"""
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="章節介紹", blank=True, null=True)
pub_date = models.DateField(verbose_name="發布日期", auto_now_add=True)
class Meta:
unique_together = ("course", 'chapter')
verbose_name_plural = "10. 課程章節"
def __str__(self):
return "%s:(第%s章)%s" % (self.course, self.chapter, self.name)
class CourseSection(models.Model):
"""課時目錄"""
chapter = models.ForeignKey("CourseChapter", related_name='coursesections', on_delete=models.CASCADE)
name = models.CharField(max_length=128)
order = models.PositiveSmallIntegerField(verbose_name="課時排序", help_text="建議每個課時之間空1至2個值,以備后續插入課時")
section_type_choices = ((0, '文檔'), (1, '練習'), (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="視頻時長", blank=True, null=True, max_length=32) # 僅在前端展示使用
pub_date = models.DateTimeField(verbose_name="發布時間", auto_now_add=True)
free_trail = models.BooleanField("是否可試看", default=False)
class Meta:
unique_together = ('chapter', 'section_link')
verbose_name_plural = "11. 課時"
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="作業題目")
order = models.PositiveSmallIntegerField("作業順序", help_text="同一課程的每個作業之前的order值間隔1-2個數")
homework_type_choices = ((0, '作業'), (1, '模塊通關考核'))
homework_type = models.SmallIntegerField(choices=homework_type_choices, default=0)
requirement = models.TextField(max_length=1024, verbose_name="作業需求")
threshold = models.TextField(max_length=1024, verbose_name="踩分點")
recommend_period = models.PositiveSmallIntegerField("推薦完成周期(天)", default=7)
scholarship_value = models.PositiveSmallIntegerField("為該作業分配的獎學金(貝里)")
note = models.TextField(blank=True, null=True)
enabled = models.BooleanField(default=True, help_text="本作業如果后期不需要了,不想讓學員看到,可以設置為False")
class Meta:
unique_together = ("chapter", "title")
verbose_name_plural = "12. 章節作業"
def __str__(self):
return "%s - %s" % (self.chapter, self.title)
#
# class CourseReview(models.Model):
# """課程評價"""
# enrolled_course = models.OneToOneField("EnrolledCourse")
# about_teacher = models.FloatField(default=0, verbose_name="講師講解是否清晰")
# about_video = models.FloatField(default=0, verbose_name="內容實用")
# about_course = models.FloatField(default=0, verbose_name="課程內容通俗易懂")
# review = models.TextField(max_length=1024, verbose_name="評價")
# disagree_number = models.IntegerField(default=0, verbose_name="踩")
# agree_number = models.IntegerField(default=0, verbose_name="贊同數")
# tags = models.ManyToManyField("Tags", blank=True, verbose_name="標簽")
# date = models.DateTimeField(auto_now_add=True, verbose_name="評價日期")
# is_recommend = models.BooleanField("熱評推薦", default=False)
# hide = models.BooleanField("不在前端頁面顯示此條評價", default=False)
#
# def __str__(self):
# return "%s-%s" % (self.enrolled_course.course, self.review)
#
# class Meta:
# verbose_name_plural = "13. 課程評價(購買課程后才能評價)"
#
#
# class DegreeCourseReview(models.Model):
# """學位課程評價
# 為了以后可以定制單獨的評價內容,所以不與普通課程的評價混在一起,單獨建表
# """
# enrolled_course = models.ForeignKey("EnrolledDegreeCourse")
# course = models.ForeignKey("Course", verbose_name="評價學位模塊", blank=True, null=True,
# help_text="不填寫即代表評價整個學位課程", limit_choices_to={'course_type': 2})
# about_teacher = models.FloatField(default=0, verbose_name="講師講解是否清晰")
# about_video = models.FloatField(default=0, verbose_name="視頻質量")
# about_course = models.FloatField(default=0, verbose_name="課程")
# review = models.TextField(max_length=1024, verbose_name="評價")
# disagree_number = models.IntegerField(default=0, verbose_name="踩")
# agree_number = models.IntegerField(default=0, verbose_name="贊同數")
# tags = models.ManyToManyField("Tags", blank=True, verbose_name="標簽")
# date = models.DateTimeField(auto_now_add=True, verbose_name="評價日期")
# is_recommend = models.BooleanField("熱評推薦", default=False)
# hide = models.BooleanField("不在前端頁面顯示此條評價", default=False)
#
# def __str__(self):
# return "%s-%s" % (self.enrolled_course, self.review)
#
# class Meta:
# verbose_name_plural = "14. 學位課評價(購買課程后才能評價)"
#
class PricePolicy(models.Model):
"""價格與有課程效期表"""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) # 關聯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個月'),
(60, '2個月'),
(90, '3個月'),
(180, '6個月'), (210, '12個月'),
(540, '18個月'), (720, '24個月'),
)
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. 價格策略"
def __str__(self):
return "%s(%s)%s" % (self.content_object, self.get_valid_period_display(), self.price)
2、cc視頻賬號
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 >點擊播放</a>
</body>
</html>
3、作業
4、生成數據文件,導入數據表
$ python manage.py makemigrations
$ python manage.py migrate
添加數據
5、訪問 course,coiurse/1/
總結
以上是生活随笔為你收集整理的06 路飞学城表结构:课程系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科目三中模拟灯光使用考试常见的错误 广州
- 下一篇: 人生什么最重要