Python打造在线教学平台 —— 周报 6

业务逻辑开发

		                    ——————  学习周报 2018.12.23


Python打造在线教学平台 —— 周报 6_第1张图片

完成情况:

  • 1.课程详情页
  • 2.课程章节信息
  • 3.课程评论功能
  • 4.相关课程推荐
  • 5.视频播放页面
  • 6.讲师列表页
  • 7.讲师详情页


笔记:

1、课程详情页

  • 导入course-detail.HTML文件,并改写
  • urls.pyviews.py编写
#  views.py编写

class CourseDetailView(View):
    """
    课程详情页
    """
    def get(self, request, course_id):
        course = Course.objects.get(id=int(course_id))

        # 增加课程点击数
        course.click_nums += 1
        course.save()

        # 是否收藏课程
        has_fav_course = False

        # 是否收藏机构
        has_fav_org = False

        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user, fav_id=course.id, fav_type=1):
                has_fav_course = True

            if UserFavorite.objects.filter(user=request.user, fav_id=course.course_org.id, fav_type=2):
                has_fav_org = True

        tag = course.tag
        if tag:
            relate_coures = Course.objects.filter(tag=tag)[:1]
        else:
            relate_coures = []

        return render(request, "course-detail.html", {
            "course": course,
            "relate_coures": relate_coures,
            "has_fav_course": has_fav_course,
            "has_fav_org": has_fav_org
        })

Python打造在线教学平台 —— 周报 6_第2张图片

  • 功能1:增加课程推荐
相关课程推荐
{% for relate_course in relate_coures %}

{{ relate_course.name }}

学习时长:{{ relate_course.learn_times }}
{% endfor %}

Python打造在线教学平台 —— 周报 6_第3张图片

  • 功能2: 课程详情页增加收藏功能
    Python打造在线教学平台 —— 周报 6_第4张图片

2、课程章节信息

  • 导入course-video.html文件,进行继承更改
  • 配置urls.py文件和views.py文件
  • 进入后台数据库,增加课程章节信息
    Python打造在线教学平台 —— 周报 6_第5张图片
  • 点击开始学习,进入章节信息页:
    Python打造在线教学平台 —— 周报 6_第6张图片
  • 功能: 课程资源下载
    进入后台上传课程资源,页面点击下载,弹出下载框
    Python打造在线教学平台 —— 周报 6_第7张图片

3、课程评论功能

  • 导入前端页面course-comment.html,继承base.html等进行修改,views.py中写入实现“课程评论”的方法。
  • 配置urls.py
  • video.html文件与comment.html文件中要进行页面跳转的配置。
  • 点击评论,进入评论页面
    Python打造在线教学平台 —— 周报 6_第8张图片

具体实现评论功能:

功能1:发表评论
  • 添加评论前,首先还是得判断“用户是否登录”。这样才符合逻辑。
  • course/view.py编写“添加评论方法 ”:
class AddComentsView(View):
    """
    用户添加课程评论
    """
    def post(self, request):
        if not request.user.is_authenticated():
            # 判断用户登录状态
            return HttpResponse('{"status":"fail", "msg":"用户未登录"}', content_type='application/json')

        course_id = request.POST.get("course_id", 0)
        comments = request.POST.get("comments", "")
        if int(course_id) > 0 and comments:
            course_comments = CourseComments()
            course = Course.objects.get(id=int(course_id))
            course_comments.course = course
            course_comments.comments = comments
            course_comments.user = request.user
            course_comments.save()
            return HttpResponse('{"status":"success", "msg":"添加成功"}', content_type='application/json')
        else:
            return HttpResponse('{"status":"fail", "msg":"添加失败"}', content_type='application/json')
 


辨析:get()方法与filter()的具体不同用法:

  • get(): 如果有数据,返回一条数据;如果没有数据,抛出异常。
  • filter():如果有数据,返回一个request,类似一个可以遍历的数组;如果没有数据,返回一个空的request,不会抛出异常。


  • 配置urls.py,建立一个访问地址:
    #  添加课程评论
    url(r'^add_comment/$', AddComentsView.as_view(), name="add_comment"),
  • course-comment.html中增加实现评论的js代码:
{% block custom_js %}
    
{% endblock %}

4、相关课程推荐

  • views.py中的方法进行添加;
  • html文件进行修改;
  • 展示课程推荐:
    Python打造在线教学平台 —— 周报 6_第9张图片

5、视频播放页面

  • 导入video-play.html文件,继承base.html,进行修改;
  • views.py中编写VideoPlayView(View)方法;
  • urls.py中进行配置;
  • course-video.html文件中添加访问跳转id
  • 点击章节,跳转入播放页面
    Python打造在线教学平台 —— 周报 6_第10张图片
    对于上传视频问题: 可在"七牛云"进行,上传视频资源后,它会自动生成一个访问地址。

6、讲师列表页与详情页

  • 导入teacher-list.htmlteacher-detail.html文件,进行配置修改;
  • 配置urls.py
  • views.py中编写讲师列表页方法TeacherListView()
class TeacherListView(View):
    """
    课程讲师列表页
    """
    def get(self, request):
        all_teachers = Teacher.objects.all()

        # 课程讲师搜索
        search_keywords = request.GET.get('keywords', "")
        if search_keywords:
            all_teachers = all_teachers.filter(Q(name__icontains=search_keywords)|
                                               Q(work_company__icontains=search_keywords)|
                                               Q(work_position__icontains=search_keywords))

        sort = request.GET.get('sort', "")
        if sort:
            if sort == "hot":
                all_teachers = all_teachers.order_by("-click_nums")

        sorted_teacher = Teacher.objects.all().order_by("-click_nums")[:3]

        # 对讲师进行分页
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1

        p = Paginator(all_teachers, 3, request=request)

        teachers = p.page(page)
        return render(request, "teachers-list.html", {
            "all_teachers": teachers,
            "sorted_teacher": sorted_teacher,
            "sort": sort,
        })
  • 讲师详情页方法TeacherDetailView();
class TeacherDetailView(View):
    def get(self, request, teacher_id):
        teacher = Teacher.objects.get(id=int(teacher_id))
        teacher.click_nums += 1
        teacher.save()
        all_courses = Course.objects.filter(teacher=teacher)

        has_teacher_faved = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user, fav_type=3, fav_id=teacher.id):
                has_teacher_faved = True

        has_org_faved = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user, fav_type=2, fav_id=teacher.org.id):
                has_org_faved = True

        #讲师排行
        sorted_teacher = Teacher.objects.all().order_by("-click_nums")[:3]
        return render(request, "teacher-detail.html", {
            "teacher":teacher,
            "all_courses":all_courses,
            "sorted_teacher":sorted_teacher,
            "has_teacher_faved": has_teacher_faved,
            "has_org_faved":has_org_faved
        })
  • 列表页展示:
    Python打造在线教学平台 —— 周报 6_第11张图片
  • 排行榜展示:
    Python打造在线教学平台 —— 周报 6_第12张图片
  • 讲师详情页展示:
    Python打造在线教学平台 —— 周报 6_第13张图片


你可能感兴趣的:(Django项目笔记)