2020-05-18--Django项目16--课程章节页面讲师提示,课程详情页的授课机构,相关课程推荐

课程章节页面--讲师提示

也就是:



首先找到这部分代码:



在view中已经把这个课的课程信息传给前端了,所以直接进行数据绑定:

这里的a标签的连接是连接到教师详情页面,这个等开发完成后添加。

Teacher类和课程类是一对多的关系,所以可以使用ORM进行调用。
运行:


课程章节页面--该课同学还学过:

也就是:



首先找到这块代码:



首先我们分析:要查询学习了该课程的用户还学习哪些课程,那么就要有一个表来存储这些数据,这个表就是operations下的UserCouser类,那么就要在用户每次点击立即学习按钮也就是进入点击的课程详情页面时,把相应的课程id和user_id记录存入数据库中。
具体UserCouser类的字段:
class UserCourse(BaseModel):
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name="用户")
    course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name="课程")

所以要在course/views.py/CourseLessonView类中:
(因为用户进入了相应的课程章节页面才能表明他确实学习了该课程,所以要在CourseLessonView类中写)

        # 如果用户点击学习了该课程,那么就添加到 用户课程 的表中
        #判断用户之前是否学习过该课程。
        if not UserCourse.objects.filter(user=request.user,course=course):    #单例模式
            uscour = UserCourse()  # 实例化表
            uscour.user = request.user   #增加用户课程表
            uscour.course = course
            uscour.save()

接下来要根据用户点击的课程到该表中查询数据:
所以接着要在后台view中把数据查询出来。

 #学过该课的同学该学过模块
        all_user = UserCourse.objects.filter(course=course)    #查询学过该课的用户都有谁
        user_ids = [users.user_id for users in all_user]     #循环遍历这些用户,添加到数组中
        # print(user_ids)
        # 筛选出表中user_id在数组中的queryset对象
        course_all = UserCourse.objects.filter(user_id__in=user_ids).order_by('-course__click_nums')
        course_list = []         #用于存储课程列表
        for icourse in course_all:         #遍历queryset对象
            if icourse.course_id != int(course_id) and icourse.course not in course_list:
                #如果数组中遍历到当前课程,就pass掉,   如果该课程对象没有在列表中,就加入该列表
                course_list.append(icourse.course)
        course_list = course_list[:5]
        # print(course_id)
        # print(course.id)
        # print(course_list)

分析:
1.首先根据用户当前课程在表中查询学过该课程的用户都有哪些。
返回若干个queryset对象。
2.接着根据这些对象再去这个表中查询这些对象学习过的课程。
具体做法:遍历queryset对象,把这些对象的user_id存到数组user_ids中,然后在表中过滤:(user_id字段在该数组中)的有哪些对象。把这些对象排序
3.根据这些对象遍历取出所有课程,加入一个列表中。但是要加入判断:

  • 去除当前页面的课程
  • 去重 (如果有多个用户学习了同一门课程,那么就会出现多个重复现象)

4.列表中截取前5个。(如果在刚查出来的时候截取前五个,会有重复的占位,导致最后列表中元素不到5个)

运行:
当前登录的用户id为2,
当点击id为5的课程时,



学习该课程的用户该学习了:



数据库UserCourse中:

结果分析:
学过id为5 的课程的user只有2号用户,所以查询到12345号课程,

由于当前页面的课程id为5,所以去除5,为1234

课程详情中授课机构的展示

也就是:



之前对这部分实现了一些内容,现在完善一下:



通过外键查询课程数和教师数。
根据对应课程的机构判断该机构是否金牌和是否认证,并且相应的显示图片。

部分代码:

<ul>
       <li>
            <span>课 &nbsp;程&nbsp; 数:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ course.course_org.course_set.all.count }}</span>
      </li>
      <li>
           <span>教 &nbsp;师&nbsp; 数:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ course.course_org.teacher_set.all.count }}</span>
      </li>
      <li>所在地区:&nbsp;&nbsp;{{ course.course_org.address }}</li>
      <li>认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;证&nbsp;:
                                    &nbsp;&nbsp;
            {#是否认证和金牌#}
            {% if course.course_org.is_auth and course.course_org.is_gold %}
                   <img src="{% static 'images/authentication.png' %}"/>
                   <img src="{% static 'images/gold.png' %}"/>
            {% elif course.course_org.is_auth and not course.course_org.is_gold %}
                   <img src="{% static 'images/authentication.png' %}"/>
            {% elif not course.course_org.is_auth and course.course_org.is_gold %}
                   <img src="{% static 'images/gold.png' %}"/>
            {% endif %}
     </li>
</ul>

运行:


相关课程推荐

也就是:



这里类似于淘宝京东等app中的猜你喜欢模块,需要人工智能进行实现。

人工智能:



这里我们采用根据课程的标签进行相关推荐。
首先找到这部分的html代码:



在courses/view.py/CourseDetailView类:
(因为这是课程详情页面的内容,所以要在CourseDetailView中写)
#相关课程推荐
        #根据课程标签进行推荐
        course_tag = course.tag        #获取当前课程的标签
        course_list = []     #用于存储课程的列表
        if course_tag:
            # 过滤课程标签在该标签中的课程,并去除id为当前课程的项,取前三个,  返回若干个queryset对象
            course_list = Course.objects.filter(tag__contains=course.tag).exclude(id=course.id)[:3]
        # print(course_list)

分析:
首先获取该课程的标签,判断这个标签是否存在,如果存在,就过滤数据库中所有课程标签包含这个标签的课程,还要去除id为当前课程的那一项。返回一个queryset对象。
在前端的页面中进行循环展示:



运行:
首先我们想让当用户点击python时,推荐下边的三个课程。



点击python:

出现三个课程:

完成

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355