zoukankan      html  css  js  c++  java
  • 22、Django实战第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

    前端页面动态展示评论

  • 相关阅读:
    Vuex ~ 初识
    Vue 2.0 生命周期-钩子函数理解
    vue利用watch侦听对象具体的属性 ~ 巧用计算属性computed做中间层
    Elements in iteration expect to have 'v-bind:key' directives.' 提示错误如何解决?
    微信小程序-如何自定义导航栏(navigationStyle)?
    微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)
    [Java] Collections
    [Java] Map / HashMap
    [Data Structure] 红黑树( Red-Black Tree )
    [Data Structure] 二叉搜索树(Binary Search Tree)
  • 原文地址:https://www.cnblogs.com/sellsa/p/8641440.html
Copyright © 2011-2022 走看看