web应用框架——Django实践项目(七)

一.开始学习模块

  • 将course_video页面放入到项目中

页面链接:https://pan.baidu.com/s/1GcBTvo5Jy4PytgL9Va6snw
提取码:up7i

  • 配置路由
from apps.courses.views import CourseListView,CourseDetailView,CourseLessonView
...
url(r'^(?P<course_id>\d+)/lesson/$', CourseLessonView.as_view(), name='lesson'),
  • 打开apps/course/views.py文件填写视图
class CourseLessonView(View):
    """
    章节信息
    """
    login_url = '/login/'
    def get(self, request, course_id, *args, **kwargs):
        course = Course.objects.get(id=int(course_id))
        # 点击到课程 的详情就记录一次点击数
        course.click_nums += 1
        course.save()

        #该课的同学还学过
        # 查询当前用户都学了那些课
        user_courses = UserCourse.objects.filter(course=course)
        user_ids = [user_course.user.id for user_course in user_courses]
        print(user_ids)
        # 查询这个用户关联的所有课程
        all_courses = UserCourse.objects.filter(user_id__in=user_ids).order_by("-course__click_nums")[:5]
      
        return render(request, 'course-video.html',
                      {"course": course,
                       })
  • 模板继承,打开course_video



    别忘记将css样式填入里面

{% block custom_css %}
    <link rel="stylesheet" type="text/css" href="/static/css/muke/base.css"/>
    <link rel="stylesheet" type="text/css" href="/static/css/muke/common-less.css"/>
    <link rel="stylesheet" type="text/css" href="/static/css/muke/course/learn-less.css"/>
    <link rel="stylesheet" type="text/css" href="/static/css/aui.css"/>
    <link rel="stylesheet" type="text/css" href="/static/css/mooc.css"/>
    <link rel="stylesheet" type="text/css" href="/static/css/muke/course/common-less.css">
{% endblock %}
  • 打开course_video.html改写一些信息



  • 刷新浏览器页面


  • 进入到xadmin后台管理页面,添加章节信息


  • 打开course_video.html,修改课程



    找到这里删除到只剩一个



    先写一个循环


  • 进入到xadmin后台管理页面,添加视频信息


  • 打开course_video.html,修改视频章节


  • 刷新页面


二.退出登录

  • 打开templates/base.html文件


  • 打开MXOline/urls.py文件
from apps.users.views import LoginView,LogoutView
...
path('logout/',LogoutView.as_view(), name ='logout'),
  • 打开MXOline/user/views.py
from django.contrib.auth import authenticate, login,logout
...
class LogoutView(View):
    def get(self, request, *args, **kwargs):
        logout(request)
        # 重定向到网站首页
        return HttpResponseRedirect(reverse("index"))
  • 刷新页面


三.开始学习的时候进行登陆

  • 打开apps/course/views.py文件
from django.contrib.auth.mixins import LoginRequiredMixin
...
class CourseLessonView(LoginRequiredMixin,View):
    """
    章节信息
    """
    login_url = '/login/'
  • 打开apps/user/views.py文件
        if request.user.is_authenticated:
            return HttpResponseRedirect(reverse("index"))
        next = request.GET.get("next", "")

        return render(request, 'login.html', {"next": next})
...
# 取一下next值
                next = request.GET.get("next", "")
                if next:
                    return HttpResponseRedirect(next)

  • 打开templates/login.html文件


  • 刷新页面,退出登录以后点击开始登陆会跳转到登陆页面,登陆以后会跳转到章节信息界面


四.资料下载

  • 进入到xadmin后台管理页面,添加课程资源


  • 我们可以在项目里面找到我们的这个压缩包


  • 打开apps/courses/views.py文件
from apps.courses.models import CourseResource
...
        course_resource = CourseResource.objects.filter(course=course)
        return render(request, 'course-video.html',
                      {"course": course,
                       "course_resource":course_resource,
  • 打开course_video.html文件
{% for resource in course_resource %}
                            <li>
                                <span ><i class="aui-iconfont aui-icon-file"></i>{{ resource.name }}</span>
                                <a href="{{ resource.file.url }}" class="downcode" target="_blank" download="" data-id="274" title="">下载</a>
                            </li>
                            {% endfor %}
  • 刷新页面


五.讲师提示

  • 打开course_video.html文件


  • 刷新页面


六.该课的同学还学过

  • 打开xadmin后台管理,添加用户课程


  • 打开apps/courses/views.py文件
#该课的同学还学过
        # 查询当前用户都学了那些课
        user_courses = UserCourse.objects.filter(course=course)
        user_ids = [user_course.user.id for user_course in user_courses]
        print(user_ids)
        # 查询这个用户关联的所有课程
        all_courses = UserCourse.objects.filter(user_id__in=user_ids).order_by("-course__click_nums")[:5]
        # 过滤掉当前课程
        related_courses = []
        for item in all_courses:
            if item.course.id != course.id:
                related_courses.append(item.course)
  • 打开course_video.html文件


{% for course in related_courses %}
                                        <li class="curr">
                                        <a href="{% url 'course:detail' course.id %}" target="_blank">
                                            <img src="{{ course.image.url }}" alt="{{ course.name }}">
                                            <span class="name autowrap">{{ course.name }}</span>
                                        </a>
                                    </li>
                                    {% endfor %}
  • 刷新页面


七.授课机构

  • 打开course_detail.html文件进行修改
<div class="right">
                    <div class="head">
                        <h1>授课机构</h1>
                        <p>{{ course.course_org.desc }}</p>
                    </div>
                    <div class="pic">
                        <a href="/company/14/">
                            <img width="150" height="80" src="{{ course.course_org.image.url }}"/>
                        </a>
                    </div>
                    <a href="/company/14/">
                        <h2 class="center" title="{{ course.course_org.name }}">{{ course.course_org.name }}</h2>
                    </a>
                    <div class="btn  notlogin
                         " data-favid="14" id="jsRightBtn">
                        {% if has_fav_org %}已收藏{% else %}收藏{% endif %}
                    </div>
                    <div class="clear">
                        <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>
                            {% if course.course_org.is_gold %}
                            <li>认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;证:
                                &nbsp;&nbsp;
                                <img title="金牌机构" , src="{% static 'images/gold.png' %}"/>
                            </li>
                            {% endif %}

在最前面加上这句:

{% load staticfiles %}
  • 刷新页面


八.相关课程推荐

1.单标签进行课程推荐

  • 打开apps/courses/views.py文件
#课程推荐
        #通过课程的单标签进行课程推荐

        tag = course.tag
        related_courses = []
        if tag:
            related_courses = Course.objects.filter(tag=tag).exclude(id__in=[course.id])[:3]
            print(related_courses)
...
 "related_courses":related_courses
  • 打开course_detail.html文件
 {% for course in related_courses %}
                        <dl>
                        <dt>
                            <a target="_blank" href="">
                                <img width="240" height="220" class="scrollLoading"
                                     src="{{ course.image.url }}"/>
                            </a>
                        </dt>
                        <dd>
                            <a target="_blank" href=""><h2> {{ course.name }}</h2></a>
                            <span class="fl">学习时长:<i class="key">{{ course.learn_times }}</i></span>
                        </dd>
                    </dl>
                    {% endfor %}
  • 刷新页面:


2.通过 CourseTag类进行课程推荐

  • 打开xadmin的后台管理界面,添加课程标签


  • 打开apps/courses/views.py文件
tags = course.coursetag_set.all()
        # 遍历
        tag_list = [tag.tag for tag in tags]
        course_tags = CourseTag.objects.filter(tag__in=tag_list).exclude(course__id=course.id)
        related_courses = set()
        for course_tag in course_tags:
            related_courses.add(course_tag.course)
            print(related_courses)
...
 "related_courses":related_courses
  • 刷新页面


以上项目代码可在我的GitHub上面查看:

https://github.com/zhaoXiY/MXOline

(此文章仅作为个人学习笔记使用,如有错误欢迎指正~)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。