C:\Users\hlg\PycharmProjects\MxOnline\apps\utils\mixin_utils.py
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class LoginRequiredMixin(object):
@method_decorator(login_required(login_url='/login/'))
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
C:\Users\hlg\PycharmProjects\MxOnline\apps\courses\views.py
# _*_ encoding:utf-8 _*_
from django.shortcuts import render
from django.views.generic.base import View
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
from django.http import HttpResponse
from .models import Course, CourseResource
from operation.models import UserFavorite, CourseComments, UserCourse
from utils.mixin_utils import LoginRequiredMixin
# Create your views here.
class CourseListView(View):
def get(self, request):
all_courses = Course.objects.all().order_by("-add_time")
hot_courses = Course.objects.all().order_by("-click_nums")[:3]
sort = request.GET.get('sort', "")
if sort:
if sort == "students":
all_courses = all_courses.order_by("-students")
elif sort == "sort":
all_courses = all_courses.order_by("-click_nums")
# 对课程进行分页
try:
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
# 一定要3个参数,不然报错
p = Paginator(all_courses, 5, 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))
# 查询用户是否已经关联了该课程
if_user_courses = UserCourse.objects.filter(user=request.user, course=course)
# 如果没有关联,创建一个关联
if not if_user_courses:
if_user_courses = UserCourse(user=request.user, course=course)
if_user_courses.save()
user_cousers = UserCourse.objects.filter(course=course)
user_ids = [user_couser.user.id for user_couser in user_cousers]
# user_id user是一个外键,所以用user_id,就可以查询
all_user_courses = UserCourse.objects.filter(user_id__in=user_ids)
# 取出所有课程id
course_ids = [user_couser.course.id for user_couser in all_user_courses]
# 获取学过该用户学过其他的所有课程
relate_courses = Course.objects.filter(id__in=course_ids).order_by("-click_nums")
all_resource = CourseResource.objects.filter(course=course)
return render(request, "course-video.html", {
"course": course,
"course_resources": all_resource,
"relate_courses": relate_courses
})
class CommentsView(LoginRequiredMixin, View):
def get(self, request, course_id):
course = Course.objects.get(id=int(course_id))
all_resource = CourseResource.objects.filter(course=course)
all_comments = CourseComments.objects.all()
return render(request, "course-comment.html", {
"course": course,
"course_resources": all_resource,
"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", 0)
if 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')
<div class="cp-other-learned js-comp-tabs">
<div class="cp-header clearfix">
<h2 class="cp-tit l">该课的同学还学过</h2>
</div>
<div class="cp-body">
<div class="cp-tab-pannel js-comp-tab-pannel" data-pannel="course" style="display: block">
<!-- img 200 x 112 -->
<ul class="other-list">
{% for relate_course in relate_courses %}
<li class="curr">
<a href="{% url 'course:course_detail' relate_course.id %}" target="_blank">
<img src="{{ MEDIA_URL }}{{ relate_course.image }}" alt="{{ relate_course.name }}">
<span class="name autowrap">{{ relate_course.name }}</span>
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="cp-tab-pannel js-comp-tab-pannel" data-pannel="plan">
<ul class="other-list">
<li class="curr">
<a href="/course/programdetail/pid/31?src=sug" target="_blank">
<img src="http://img.mukewang.com/56551e6700018b0c09600720-240-135.jpg" alt="Java工程师">
<span class="name autowrap">Java工程师</span>
</a>
</li>
</ul>
</div>
</div>
</div>
扫描二维码关注公众号,回复:
1897517 查看本文章