Django+xadmin打造在线教育平台(从0-1全过程手把手教程附加各种采坑笔记第9章)

organization写完了,下面就是是courses

from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from django.views.generic.base import View
from pure_pagination import Paginator, PageNotAnInteger
from courses.models import Course, CourseResourse, Video
from operation.models import UserFavorite, CourseComments, UserCourse
from utils.mixin_utils import LoginRequiredMixin

class CourseListView(View):
    def get(self,request):
    #从数据库获取Course表数据并且以时间降序排序
        all_courses = Course.objects.all().order_by('-add_time')
    #从数据库获取Course表数据并且以点击数降序排序,取前三位
        hot_courses = Course.objects.all().order_by('-click_nums')[:3]

        #课程搜索
        search_keywords = request.GET.get('keywords','')
        if search_keywords:
        #name,desc,detail这三个字段不区分大小写
            all_courses = all_courses.filter(Q(name__icontains=search_keywords) |
                                             Q(desc__icontains=search_keywords) |
                                             Q(detail__icontains=search_keywords))

        #课程排序
        sort = request.GET.get('sort', '')
        if sort:
            if sort == 'students':
                all_courses = all_courses.order_by('-students')
            elif sort == 'hot':
                all_courses = all_courses.order_by('-click_nums')
        # 对课程进行分页
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1

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

        courses = p.page(page)

        return render(request,'course-list.html',{
            'all_courses': courses,
            'sort': sort,
            'hot_courses': hot_courses,
        })

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_courses = Course.objects.filter(tag=tag)[:1]
        else:
            relate_courses = []
        return render(request,'course-detail.html',{
                'course':course,
                'relate_courses':relate_courses,
                'has_fav_course':has_fav_course,
                'has_fav_org':has_fav_org,
        })

class CourseInfoView(LoginRequiredMixin,View):
    def get(self,request,course_id):
        course = Course.objects.get(id=int(course_id))
        course.students += 1
        course.save()
        #查询用户是否已经关联了该课程
        user_courses = UserCourse.objects.filter(user = request.user,course=course)
        if not user_courses:
            user_course = UserCourse(user = request.user,course=course)
            user_course.save()
        user_courses = UserCourse.objects.filter(course=course)
        user_ids = [user_courses.user.id for user_courses in user_courses]
        all_user_courses = UserCourse.objects.filter(user_id__in=user_ids)
        #取出所有课程ID
        course_ids = [user_courses.course.id for user_courses in all_user_courses]
        #获取学过该用户学过其他的所有课程
        relate_courses = Course.objects.filter(id__in=course_ids).order_by("-click_nums")[:5]
        all_resources = CourseResourse.objects.filter(course=course)
        return render(request, 'course-video.html', {
            'course': course,
            'all_resources': all_resources,
            'relate_courses': relate_courses,

        })

class CommentsView(LoginRequiredMixin,View):
    def get(self,request,course_id):
        course = Course.objects.get(id=int(course_id))
        all_resources = CourseResourse.objects.filter(course=course)
        all_comments = CourseComments.objects.all()
        return render(request, 'course-comment.html', {
            'course': course,
            'all_resources': all_resources,
            'all_comments': all_comments,

        })

class AddCommentsView(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:
        #这里的CourseComments是课程评论的数据表
            course_comments = CourseComments()
            course = Course.objects.get(id=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')

class VideoPlayView(View):
    """
    课程视频播放页
    """
    def get(self, request, video_id):
        video = Video.objects.get(id=int(video_id))
        course = video.lesson.course
        course.students += 1
        course.save()
        # 查询用户是否已经关联了该课程
        user_courses = UserCourse.objects.filter(user=request.user, course=course)
        if not user_courses:
            user_course = UserCourse(user=request.user, course=course)
            user_course.save()
        user_courses = UserCourse.objects.filter(course=course)
        #这里采用了列表推导式,作用是循环依次取出user_courses中的每一个数据赋值给user_course,然后在这基础上,取出这个值的user.id值。
        user_ids = [user_course.user.id for user_course in user_courses]
        all_user_courses = UserCourse.objects.filter(user_id__in=user_ids)
        # 取出所有课程ID
        course_ids = [user_courses.course.id for user_courses in all_user_courses]
        # 获取学过该用户学过其他的所有课程
        relate_courses = Course.objects.filter(id__in=course_ids).order_by("-click_nums")[:5]
        all_resources = CourseResourse.objects.filter(course=course)
        return render(request, 'course-play.html', {
            'video': video,
            'course': course,
            'all_resources': all_resources,
            'relate_courses': relate_courses,

        })


course_list:

{% extends 'base.html' %}
{% block title %}公开课列表-慕学在线网{% endblock %}
{% load staticfiles %}
{% block custom_bread %}
<section>
        <div class="wp">
            <ul  class="crumbs">
                <li><a href="{% url 'index' %}">首页</a>></li>
                <li>公开课</li>
            </ul>
        </div>
    </section>
{% endblock %}

{% block contend %}
    <section>
	<div class="wp">
		<div class="list" style="margin-top:0;">
			<div class="left layout">
				<div class="head">
					<ul class="tab_header">
						<li {% if sort ==  '' %}class='active'{% endif %}><a href="?sort=">最新 </a></li>
						<li {% if sort ==  'hot' %}class='active'{% endif %}><a href="?sort=hot">最热门</a></li>
						<li {% if sort ==  'students' %}class='active'{% endif %}><a href="?sort=students">参与人数</a></li>
					</ul>
				</div>
                <div id="inWindow">
                    <div class="tab_cont " id="content">
					<div class="group_list">
                    {% for course in all_courses.object_list %}
                            <div class="box">
                                <a href="{% url 'course:course_detail' course.id %}">
                                    <img width="280" height="350" class="scrollLoading" src="{
  { MEDIA_URL }}{
  { course.image }}"/>
                                </a>
                                <div class="des">
                                    <a href="{% url 'course:course_detail' course.id %}">
                                        <h2>{
  { course.name }}</h2>
                                    </a>
                                    <span class="fl">时长:<i class="key">{
  { course.learn_times }}</i></span>
                                    <span class="fr">学习人数:{
  { course.students }}&nbsp;&nbsp;</span>
                                </div>
                                <div class="bottom">
                                    <a href="{% url 'course:course_detail' course.id %}"><span class="fl">{
  { course.course_org.name }}</span></a>
                                    <span class="
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值