22Django实战第22天:课程评论

Posted 何波安的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22Django实战第22天:课程评论相关的知识,希望对你有一定的参考价值。

1、编辑course-comment.html

2、编辑courses.views.py

class CourseCommentView(LoginRequiredMixin, View):
    def get(self, request, course_id):
        course = Course.objects.get(id=course_id)
        return render(request, \'course-comment.html\', {
            \'course\': course,
        })

3、配置url

...
from .views import  CourseCommentView


urlpatterns = [
    ...
    url(r\'comment/(?P<course_id>\\d+)/$\', CourseCommentView.as_view(), name=\'course_comment\'),
    

]

4、在章节前端页面(course-video.html)修改链接

5、在评论前端页面(course-comment.html)修改链接

7、资料下载、讲师提示、课程推荐和之前一样

class CourseCommentView(LoginRequiredMixin, View):
    def get(self, request, course_id):
        course = Course.objects.get(id=course_id)
        all_resource = CourseResource.objects.filter(course=course)

        # 查询用户是否已经关联了该数据
        user_course = UserCourse.objects.filter(user=request.user, course=course)
        if not user_course:
            # 如果没有则写入数据库
            my_course = UserCourse(user=request.user, course=course)
            my_course.save()

        # 该同学还学过
        user_courses = UserCourse.objects.filter(course=course) #获取“用户课程”表里面该课程的所有记录
        user_ids = [user_course.user.id for user_course in user_courses] #获取学过该课程的所有用户id
        all_user_courses = UserCourse.objects.filter(user_id__in=user_ids) #获取这些用户学过的课程记录
        course_ids = [user_course.id for user_course in all_user_courses] #获取这些课程的id
        relate_courses = Course.objects.filter(id__in=course_ids).order_by(\'-click_nums\')[:5] #根据点击量取出5个
        return render(request, \'course-comment.html\', {
            \'course\': course,
            \'all_resource\': all_resource,
            \'relate_courses\': relate_courses,
        })

8、上面的前端部分这里就不截图演示了

 

评论部分

 编辑courses.view.py,创建一个评论的类

...
from operation.models import CourseComments
from django.http import HttpResponse


class AddCommentView(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\')

配置url,编辑courses.urls.py

...
from .views import AddCommentView


urlpatterns = [
    ...
    url(r\'add_comment/$\', AddCommentView.as_view(), name=\'add_comment\'),


]

编辑course-comment.html中的js部分

编辑courses.models.py,利用外键获取本课程的评论

class Course(models.Model):
    name = models.CharField(max_length=50, verbose_name=\'课程名\')
    course_org = models.ForeignKey(CourseOrg, verbose_name=\'课程机构\')
    desc = models.CharField(max_length=300, verbose_name=\'课程描述\')
    details = models.TextField(verbose_name=\'课程详情\')
    degree = models.CharField(verbose_name=\'课程难度\', choices=((\'cj\', \'初级\'), (\'zj\', \'中级\'), (\'gj\', \'高级\')), max_length=2)
    learn_times = models.IntegerField(default=0, verbose_name=\'学习时长(分钟)\')
    students = models.IntegerField(default=0, verbose_name=\'学习人数\')
    fav_nums = models.IntegerField(default=0, verbose_name=\'收藏人数\')
    image = models.ImageField(upload_to=\'courses/%Y/%m\', verbose_name=\'封面图\', max_length=100)
    click_nums = models.IntegerField(default=0, verbose_name=\'点击数\')
    category = models.CharField(max_length=10, verbose_name=u\'类别\', default=\'\')
    tag = models.CharField(max_length=10, verbose_name=u\'标签\', default=\'\')
    teacher = models.ForeignKey(Teacher, verbose_name=\'课程讲师\', null=True, blank=True)
    youneed_know = models.CharField(default=\'\', max_length=300, verbose_name=\'课程须知\')
    teacher_tell = models.CharField(default=\'\', max_length=300, verbose_name=\'你能学到\')
    add_time = models.DateTimeField(default=datetime.now, verbose_name=\'添加时间\')

    class Meta:
        verbose_name = \'课程\'
        verbose_name_plural = verbose_name

    def get_lesson_nums(self):
        """获取章节数"""
        return self.lesson_set.count()

    def get_lesson(self):
        """获取章节"""
        return self.lesson_set.all()

    def get_students(self):
        """获取3个学习用户"""
        return self.usercourse_set.all()[:3]
    
    def get_comment(self):
        """获取评论"""
        return self.coursecomments_set.all()

    def __str__(self):
        return self.name

前端页面动态展示评论

 

以上是关于22Django实战第22天:课程评论的主要内容,如果未能解决你的问题,请参考以下文章

17Django实战第17天:机构详情展示

第22课 《公众号文章》

13Django实战第13天:分页列表功能

15Django实战第15天:我要学习咨询

100天精通Oracle-实战系列(第22天)Oracle 数据泵全库导出导入

100天精通Oracle-实战系列(第22天)Oracle 数据泵全库导出导入