专题:Django2.0.8+xadmin2实现在线学习网站
Django2.0.8+xadmin2实现在线学习网站,课程、讲师、机构、用户收藏功能。GitHub地址:https://github.com/xyliurui/OnlineLearningPlatform ;Django版本:2.0.8
更多内容请点击 我的博客 查看,欢迎来访。
机构详情概览
- 机构首页
- 机构课程
- 机构介绍
- 机构讲师
登录xadmin添加基础的必要数据。添加课程与讲师。
课程模型外键指向机构Course(models.Model)
课程中应该有一个外键指向它是哪个机构的。
courses/models.py
from organization.models import CourseOrg
# 课程信息表
class Course(models.Model):
DEGREE_CHOICES = (
("cj", "初级"),
("zj", "中级"),
("gj", "高级")
)
name = models.CharField(max_length=50, verbose_name='课程名')
desc = models.CharField(max_length=300, verbose_name='课程描述')
# 后面会改为富文本
detail = models.TextField(verbose_name='课程详情')
degree = models.CharField(max_length=3, choices=DEGREE_CHOICES, verbose_name='课程难度')
learn_times = models.IntegerField(default=0, verbose_name='学习时长(分钟数)')
# 点击开始学习后记录学习人数
students = models.IntegerField(default=0, verbose_name='学习人数')
fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')
image = models.ImageField(upload_to='course/%Y/%m', max_length=100, blank=True, null=True, verbose_name='封面图')
# 点击到课程信息界面即需要记录点击数
click_nums = models.IntegerField(default=0, verbose_name='点击数')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
course_org = models.ForeignKey(CourseOrg, null=True, blank=True, related_name='courses', on_delete=models.CASCADE, verbose_name='所属机构')
class Meta:
verbose_name = verbose_name_plural = '课程'
def __str__(self):
return self.name
机构讲师增加头像字段
# 机构里的讲师信息
class Teacher(models.Model):
org = models.ForeignKey(CourseOrg, on_delete=models.CASCADE, related_name='teachers', verbose_name='所属机构')
name = models.CharField(max_length=50, verbose_name='讲师名称')
work_years = models.IntegerField(default=0, verbose_name='工作年限')
work_company = models.CharField(max_length=50, verbose_name='就职公司')
work_position = models.CharField(max_length=50, verbose_name='公司职位')
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"收藏数")
add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间")
image = models.ImageField(upload_to='teacher/%Y/%m', null=True, blank=True, max_length=100, verbose_name='讲师头像')
class Meta:
verbose_name_plural = verbose_name = '讲师'
def __str__(self):
return self.name
增加字段后执行同步
manage.py@DjangoOnlineLearningPlatform > makemigrations
manage.py@DjangoOnlineLearningPlatform > migrate
新增外键字段应该null=true,blank=true
。
因为历史数据中没有这个外键字段
机构首页视图OrgHomeView(View)
# 机构首页
class OrgHomeView(View):
def get(self, request, org_id):
# 通过id找到机构
course_org = CourseOrg.objects.get(id=org_id)
# 通过机构找到这个机构的课程和教师
all_course = course_org.courses.all()[:4]
all_teacher = course_org.teachers.all()[:4]
return render(request, 'org-detail-homepage.html', locals())
机构首页url
from organization.views import OrgListView, AddUserAskView, OrgHomeView
app_name = 'organization'
urlpatterns = [
# 课程机构列表url
path('list/', OrgListView.as_view(), name="org_list"),
path('add_ask/', AddUserAskView.as_view(), name='add_ask'),
re_path('home/(?P\d+)/', OrgHomeView.as_view(), name='org_home'), # 机构详情首页
]
机构详情模板org-detail-homepage.html
使用for循环遍历返回的信息。
机构课程详情
机构课程列表视图OrgCourseView(View)
# 机构课程详情
class OrgCourseView(View):
def get(self, request, org_id):
# 通过id找到机构
course_org = CourseOrg.objects.get(id=org_id)
# 通过机构找到这个机构的课程,并按一些数据进行排序
all_course = course_org.courses.all().order_by('-students')
sort = request.GET.get('sort', '')
if sort:
if sort == 'fav':
all_course = all_course.order_by('-fav_nums')
elif sort == 'click':
all_course = all_course.order_by('click_nums')
return render(request, 'org-detail-course.html', locals())
课程列表url
from organization.views import OrgListView, AddUserAskView, OrgHomeView, OrgCourseView
app_name = 'organization'
urlpatterns = [
# 课程机构列表url
path('list/', OrgListView.as_view(), name="org_list"),
path('add_ask/', AddUserAskView.as_view(), name='add_ask'),
re_path('home/(?P\d+)/', OrgHomeView.as_view(), name='org_home'), # 机构详情首页
re_path('id/(?P\d+)/courses/', OrgCourseView.as_view(), name='org_course'), # 机构课程列表
]
课程列表模板org-detail-course.html
可以直接继承org-detail-homepage.html里面的部分代码
{% block breadcrumb_org %}
{{ course_org.name }}
所有课程
{% endblock breadcrumb_org %}