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
# 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(View):
"""
课程章节信息
"""
def get(self, request, course_id):
course = Course.objects.get(id=int(course_id))
all_resource = CourseResource.objects.filter(course=course)
return render(request, "course-video.html", {
"course": course,
"course_resources": all_resource
})
class CommentsView(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')
# 课程评论
url(r'^comment/(?P<course_id>\d+)/$', CommentsView.as_view(), name="course_comment"),
# 添加课程评论
url(r'^add_comment/', AddCommentsView.as_view(), name="add_comment"),
{% extends 'base.html' %}
{% block title %}公开课评论 - 慕学在线网{% endblock %}
{% load staticfiles %}
{% block custom_css %}
<link rel="stylesheet" type="text/css" href="{% static 'css/muke/course/learn-less.css' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'css/muke/course/course-comment.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/common-less.css' %}">
<link rel="stylesheet" type="text/css" href="{% static 'css/mooc.css' %}" />
{% endblock %}
{% block custom_bread %}
<section>
<div class="wp">
<ul class="crumbs">
<li><a href="index.html">首页</a>></li>
<li><a href="{% url 'course:course_list' %}">公开课</a>></li>
<li><a href="{% url 'course:course_detail' course.id %}">课程详情</a>></li>
<li>课程评论</li>
</ul>
</div>
</section>
{% endblock %}
{% block content %}
<div id="main">
<div class="course-infos">
<div class="w pr">
<div style="height: 15px" class="path">
</div>
<div class="hd">
<h2 class="l">{{ course.name }}</h2>
</div>
<div class="statics clearfix">
<div class="static-item ">
<span class="meta-value"><strong>{{ course.get_degree_display }}</strong></span>
<span class="meta">难度</span>
<em></em>
</div>
<div class="static-item static-time">
<span class="meta-value">{{ course.learn_times }}分钟</span>
<span class="meta">时长</span>
<em></em>
</div>
<div class="static-item">
<span class="meta-value"><strong>{{ course.students }}</strong></span>
<span class="meta">学习人数</span>
<em></em>
</div>
</div>
</div>
</div>
<div class="course-info-main clearfix w has-progress">
<div class="info-bar clearfix">
<div class="content-wrap clearfix">
<div class="content">
<div class="mod-tab-menu">
<ul class="course-menu clearfix">
<li><a class="ui-tabs-active " id="learnOn" href="{% url 'course:course_info' course.id %}"><span>章节</span></a></li>
<li><a id="commentOn" class="active" href="{% url 'course:course_comment' course.id %}"><span>评论</span></a></li>
</ul>
</div>
<!--发布评论-->
<div id="js-pub-container" class="issques clearfix js-form">
<div class="wgt-ipt-wrap pub-editor-wrap " id="js-pl-input-fake">
<textarea id="js-pl-textarea" class="" placeholder="扯淡、吐槽、表扬、鼓励……想说啥就说啥!" ></textarea>
</div>
<input type="button" id="js-pl-submit" class="pub-btn" data-cid="452" value="发表评论">
<p class="global-errortip js-global-error"></p>
</div>
<div id="course_note">
<ul class="mod-post" id="comment-list">
{% for user_comments in all_comments %}
<li class="post-row">
<div class="media">
<span target="_blank"><img src='{{ MEDIA_URL }}{{ user_comments.user.image }}' width='40' height='40' /></span>
</div>
<div class="bd">
<div class="tit">
<span target="_blank">{{ user_comments.user.username }}</span>
</div>
<p class="cnt">{{ user_comments.comments }}</p>
<div class="footer clearfix">
<span title="创建时间" class="l timeago">时间:{{ user_comments.add_time }}</span>
</div>
</div>
</li>
{% endfor %}
</ul>
</div>
</div>
<div class="aside r">
<div class="bd">
<div class="box mb40">
<h4>资料下载</h4>
<ul class="downlist">
{% for course_resource in course_resources %}
<li>
<span ><i class="aui-iconfont aui-icon-file"></i>{{ course_resource.name }}</span>
<a href="{{ MEDIA_URL }}{{ course_resource.download }}" class="downcode" target="_blank" download="" data-id="274" title="">下载</a>
</li>
{% endfor %}
</ul>
</div>
<div class="box mb40">
<h4>讲师提示</h4>
<div class="teacher-info">
<a href="/u/315464/courses?sort=publish" target="_blank">
<img src='{{ MEDIA_URL }}{{ course.teacher.image }}' width='80' height='80' />
</a>
<span class="tit">
<a href="/u/315464/courses?sort=publish" target="_blank">{{ course.teacher.name }}</a>
</span>
<span class="job">{{ course.teacher.work_position }}</span>
</div>
<div class="course-info-tip">
<dl class="first">
<dt>课程须知</dt>
<dd class="autowrap">{{ course.youneed_know }}</dd>
</dl>
<dl>
<dt>老师告诉你能学到什么?</dt>
<dd class="autowrap">{{ course.teacher_tell }}</dd>
</dl>
</div>
</div>
<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">
<li class="curr">
<a href="/view/85?src=sug" target="_blank">
<img src="http://img.mukewang.com/57035ff200014b8a06000338-240-135.jpg" alt="Java入门第一季">
<span class="name autowrap">Java入门第一季</span>
</a>
</li>
<li>
<a href="/view/110?src=sug" target="_blank">
<img src="http://img.mukewang.com/5703604a0001694406000338-240-135.jpg" alt="Java入门第三季">
<span class="name autowrap">Java入门第三季</span>
</a>
</li>
<li>
<a href="/view/124?src=sug" target="_blank">
<img src="http://img.mukewang.com/570360620001390f06000338-240-135.jpg" alt="Java入门第二季">
<span class="name autowrap">Java入门第二季</span>
</a>
</li>
<li>
<a href="/view/47?src=sug" target="_blank">
<img src="http://img.mukewang.com/570765d90001bf1406000338-240-135.jpg" alt="Spring MVC起步">
<span class="name autowrap">Spring MVC起步</span>
</a>
</li>
<li>
<a href="/view/36?src=sug" target="_blank">
<img src="http://img.mukewang.com/53e1d0470001ad1e06000338-240-135.jpg" alt="JavaScript入门篇">
<span class="name autowrap">JavaScript入门篇</span>
</a>
</li>
</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>
</div> </div>
</div>
<div class="clear"></div>
</div>
</div>
</div>
{% endblock %}
{% block custom_js %}
<script type="text/javascript">
//添加评论
$('#js-pl-submit').on('click', function(){
var comments = $("#js-pl-textarea").val()
if(comments == ""){
alert("评论不能为空")
return
}
$.ajax({
cache: false,
type: "POST",
url:"{% url 'course:add_comment' %}",
data:{'course_id':{{ course.id }}, 'comments':comments},
async: true,
beforeSend:function(xhr, settings){
xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
},
success: function(data) {
if(data.status == 'fail'){
if(data.msg == '用户未登录'){
window.location.href="/login/";
}else{
alert(data.msg)
}
}else if(data.status == 'success'){
window.location.reload();//刷新当前页面.
}
},
});
});
</script>
{% endblock %}