代码拉取完成,页面将自动刷新
传统的教学模式在信息共享和互动性等方面存在着诸多的不足之处。网络教学平台不仅轻松地解决了信息资料的共享问题,而且提高了师生之间的互动性,成为教学实践的辅助平台,为此,开发一个《程序设计基础》课程在线学习系统,该系统主要内容及功能包括如下:
时间2022.12.11
settings.py
#apps模块注册
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
#数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xinglanteng', # 数据库名字
'USER': 'root',
'PASSWORD': 'WF6BCSqO',
'HOST': '47.109.58.82', # 那台机器安装了MySQL
'PORT': 3306,
}
}
#静态文件目录
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
models存在相互引用关系
解决循环引用使用分层设计
Django默认自带user表字段
自己生成的user表可以继承上述字段
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
# 复用Django自带的user字段
class UserProfile(AbstractUser):
GENDER_CHOICES = (
("male", "男"), ("female", "女")
)
nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")
birthday = models.DateField(verbose_name="生日", null=True, blank=True)
gender = models.CharField(verbose_name="性别", choices=GENDER_CHOICES, max_length=6)
address = models.CharField(max_length=100, verbose_name="地址", default="")
mobile = models.CharField(max_length=11, unique=True, verbose_name="手机号码")
image = models.ImageField(upload_to="head_image/%Y/%m", default="head_image/default.png")
class Meta:
verbose_name = "用户信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.username
#公用字段设计在最底层不会产生循环引用
class BaseModel(models.Model):
add_time = models.DateTimeField(verbose_name="添加时间", default=datetime.now)
使用上述继承需要在settings.py
# 指明使用的user表
AUTH_USER_MODEL = "users.UserProfile"
生成的user表
对应关系(实体1 <对应关系 > 实体2)
实体 | 对应关系 |
---|---|
课程(Course)与 章节(Lesson) | 1对多 |
章节(Lesson) 与 视频(Video) | 1对多 |
课程资源(CoursesResource) 与 课程(Course) | 多对1 |
课程(Course)与讲师(Teacher) | 1对1 |
from django.db import models
# Create your models here.
from apps.users.models import BaseModel
degree_chioes = (('cj', '初级'), ('zj', '中级'), ('gj', '高级'))
# 课程信息
class Courses(BaseModel):
name = models.CharField(verbose_name="课程名", max_length=50)
desc = models.CharField(verbose_name="课程描述", max_length=300)
degree = models.CharField(verbose_name="难度", choices=degree_chioes, max_length=2)
students = models.IntegerField(verbose_name="学习人数", default=0)
fav_nums = models.IntegerField(verbose_name="收藏人数", default=0)
click_nums = models.IntegerField(verbose_name="点击数", default=0)
category = models.CharField(verbose_name="课程类型", max_length=20, default=u"后端开发")
tag = models.CharField(verbose_name="课程标签", max_length=10)
youneed_know = models.CharField(verbose_name="课程须知", max_length=300, default="")
teacher_tell = models.CharField(verbose_name="老师告诉你", max_length=300, default="")
detail = models.TextField(verbose_name="课程详情")
image = models.ImageField(verbose_name="封面图", upload_to="courses/%Y/%m")
class Meta:
verbose_name = "课程信息"
verbose_name_plural = verbose_name
# 课程章节 课程信息 1对多课程章节
class Lesson(BaseModel):
course = models.ForeignKey(Courses, on_delete=models.CASCADE,verbose_name="课程") # 级联删除
name = models.CharField(verbose_name=u"章节名", max_length=100)
learn_times = models.IntegerField(verbose_name="学习时长", default=0)
class Meta:
verbose_name = "课程章节"
verbose_name_plural = verbose_name
# 视频视频 课程信息 1对多 章节视频
class Video(BaseModel):
lesson = models.ForeignKey(Lesson, verbose_name="章节", on_delete=models.CASCADE)
name = models.CharField(verbose_name="视频名", max_length=100)
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
url = models.CharField(max_length=200, verbose_name="访问地址")
[输入链接说明](http://)
class Meta:
verbose_name = "视频"
verbose_name_plural = verbose_name
# 课程资源 课程 1对多 课程资源
class CourseResourse(BaseModel):
course = models.ForeignKey(Courses, on_delete=models.CASCADE,verbose_name="课程") # 级联删除
name = models.CharField(verbose_name="名称", max_length=100)
file = models.FileField(verbose_name="下载地址", upload_to="courses/resourse/%Y/%m",max_length=200)
class Meta:
verbose_name = "课程资源"
verbose_name_plural = verbose_name
2022.12.12 23:30
对应关系(实体1 <对应关系 > 实体2)
实体 | 对应关系 |
---|---|
课程机构(CourseOrg)与 所在城市(City) | 多对多 |
from django.db import models
from apps.users.models import BaseModel
from datetime import datetime
# Create your models here.
category_chioes = (('pxjg', "培训机构"), ('gx', '高校'), ('gr', '个人'))
# 城市
class City(BaseModel):
name = models.CharField(verbose_name="城市", max_length=20)
desc = models.CharField(max_length=200, verbose_name="描述")
class Meta:
verbose_name = "城市"
verbose_name_plural = verbose_name
# 授课机构 1对多 城市
class CourseOrg(BaseModel):
city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name="城市")
name = models.CharField(max_length=50, verbose_name="机构名称")
desc = models.TextField(verbose_name="描述")
tag = models.CharField(verbose_name="机构标签", default="全国知名",max_length=10)
category = models.CharField(verbose_name="机构类别", choices=category_chioes, default="pxjg", max_length=4)
fav_nums = models.IntegerField(verbose_name="收藏人数", default=0)
click_nums = models.IntegerField(verbose_name="点击数", default=0)
students = models.IntegerField(verbose_name="学习人数", default=0)
courses_num = models.IntegerField(verbose_name="课程数", default=0)
address = models.CharField(verbose_name="地址", max_length=150)
class Meta:
verbose_name = "课程机构"
verbose_name_plural = verbose_name
# 机构教师 多对1 授课机构
class Teacher(models.Model):
org = models.ForeignKey(CourseOrg, on_delete=models.CASCADE,verbose_name=u"所属机构")
name = models.CharField(max_length=50, verbose_name=u"教师名")
work_years = models.IntegerField(default=0, verbose_name=u"工作年限")
work_company = models.CharField(max_length=50, verbose_name=u"就职公司")
work_position = models.CharField(max_length=50, verbose_name=u"公司职位")
points = models.CharField(max_length=50, verbose_name=u"教学特点")
click_nums = models.IntegerField(default=0, verbose_name=u"点击数")
fav_nums = models.IntegerField(default=0, verbose_name=u"收藏数")
age = models.IntegerField(default=18, verbose_name=u"年龄")
image = models.ImageField(default='', upload_to="teacher/%Y/%m", verbose_name=u"头像", max_length=100)
add_time = models.DateTimeField(default=datetime.now)
class Meta:
verbose_name = u"教师"
verbose_name_plural = verbose_name
2022.12.16 21:30
from datetime import datetime
from django.contrib.auth import get_user_model # 通过具体使用哪个model就去调用哪个model
from django.db import models
# Create your models here.
from apps.courses.models import Courses
class UserAsk(models.Model):
name = models.CharField(max_length=20, verbose_name=u"姓名")
mobile = models.CharField(max_length=11, verbose_name=u"手机")
course_name = models.CharField(max_length=50, verbose_name=u"课程名")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"用户咨询"
verbose_name_plural = verbose_name
UserProfile = get_user_model()
class CourseComments(models.Model):
"课程评论"
user = models.ForeignKey(UserProfile,on_delete=models.CASCADE, verbose_name=u"用户")
course = models.ForeignKey(Courses, on_delete=models.CASCADE,verbose_name=u"课程")
comments = models.CharField(max_length=200, verbose_name=u"评论")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"课程评论"
verbose_name_plural = verbose_name
class UserFavorite(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE,verbose_name=u"用户")
fav_id = models.IntegerField(default=0, verbose_name=u"数据id")
fav_type = models.IntegerField(choices=((1, "课程"), (2, "课程机构"), (3, "讲师")), default=1, verbose_name=u"收藏类型")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"用户收藏"
verbose_name_plural = verbose_name
class UserMessage(models.Model):
user = models.IntegerField(default=0, verbose_name=u"接收用户")
message = models.CharField(max_length=500, verbose_name=u"消息内容")
has_read = models.BooleanField(default=False, verbose_name=u"是否已读")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"用户消息"
verbose_name_plural = verbose_name
class UserCourse(models.Model):
user = models.ForeignKey(UserProfile, verbose_name=u"用户",on_delete=models.CASCADE)
course = models.ForeignKey(Courses, verbose_name=u"课程",on_delete=models.CASCADE)
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
class Meta:
verbose_name = u"用户课程"
verbose_name_plural = verbose_name
粗体
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。