总结:
1、点击量和收藏数的动态增加
(1)点击量
a、机构的点击量
当用户点击“授课机构”的时候,会进入机构列表,用户点击某个机构的时候,就会进入机构的详情页,那么用户进入机构详情页就可以认为用户点击这个机构。
这时候我们只需要在机构详情页的视图函数中,对维护的click_num做加1的操作。
def org_detail(request, org_id): if org_id: org = OrgInfo.objects.filter(id=int(org_id))[0] # 当用户进入到这个视图函数,那么就相当于用户点击了一下这个机构 org.click_num += 1 org.save() # 再返回页面数据的时候,需要返回收藏这个机构的状态,根据状态,让模板显示手残还是未收藏 lovestatus = False if request.user.is_authenticated: #判断用户是否登录 love = UserLove.objects.filter(love_man=request.user, love_id=int(org_id), love_type=1, love_status=True) if love: lovestatus = True return render(request, 'orgs/org-detail-homepage.html',{ 'org': org, 'detail_type': 'home', 'lovestatus': lovestatus })
b、课程的点击量
同理,点击课程的详情页,我们就给课程的点击数做加1操作。
def course_detail(request, course_id): if course_id: course = CourseInfo.objects.filter(id=course_id)[0] course.click_num += 1 course.save() relate_course = CourseInfo.objects.filter(category=course.category).exclude(id=int(course_id))[:2] # lovecourse和loveorg用来存储用户收藏这个东西的状态,在模板中,根据状态来确定页面加载时候显示的收藏还是取消收藏 lovecourse = False loveorg = False if request.user.is_authenticated: # 判断用户是否登录 # 获取用户是否收藏过课程 love1 = UserLove.objects.filter(love_id=int(course_id), love_type=2, love_status=True, love_man=request.user) if love1: lovecourse = True # 获取用户是否收藏过机构 love2 = UserLove.objects.filter(love_id=int(course.orginfo.id), love_type=1, love_status=True, love_man=request.user) if love2: loveorg = True return render(request, 'courses/course-detail.html', { 'course': course, 'relate_course': relate_course, 'lovecourse': lovecourse, 'loveorg': loveorg, })
(2)、收藏数
用户的收藏我们是用一个视图函数进行维护,那么我们要先判断用户收藏的类型,其次通过id来判断收藏的是哪个对象。然后在做加1或减1的操作。
True变False减1,False变True加1.
def user_love(request): love_id = request.GET.get('loveid', '') love_type = request.GET.get('lovetype', '') if love_id and love_type: # 根据传过来的收藏类型,判断是什么对象,根据传递过来的收藏id,判断收藏的是哪个对象 obj = None if int(love_type) == 1: obj = OrgInfo.objects.filter(id=int(love_id))[0] if int(love_type) == 2: obj = CourseInfo.objects.filter(id=int(love_id))[0] if int(love_type) == 3: obj = TeacherInfo.objects.filter(id=int(love_id))[0] # 如果收藏的id和type同时存在,那么首先去收藏表中查找这个用户有没有这个收藏记录 love = UserLove.objects.filter(love_id=love_id, love_type=int(love_type), love_man=request.user) if love: # 如果本来已经存在收藏这个东西的记录,那么需要判断收藏的状态,如果为真,代表之前收藏过, # 并且现在的页面上应该显示的是取消收藏,代表这一次点击是为了取消收藏 if love[0].love_status: love[0].love_status = False love[0].save() obj.click_num -= 1 obj.save() return JsonResponse({ 'status': 'ok', 'msg': '收藏' }) else: # 如果收藏状态为假,代表之前收藏过,并且取消了收藏,现在页面上应该显示的是收藏,这次点击是为了收藏 love[0].love_status = True love[0].save() obj.click_num += 1 obj.save() return JsonResponse({ 'status': 'ok', 'msg': '取消收藏' }) else: # 如果之前没有收藏过这个东西,代表着表中没有这条记录,需要先创建这个记录对象,然后把这个记录的状态改为True a = UserLove() a.love_man = request.user a.love_id = int(love_id) a.love_type = int(love_type) a.love_status = True a.save() obj.click_num += 1 obj.save() return JsonResponse({ 'status': 'ok', 'msg': '取消收藏' }) else: return JsonResponse({ 'status': 'fail', 'msg': '收藏失败' })
2、课程学习人数和机构学习人数的动态改变
当用户点击我要学习会跳转到course_video页面,那么我们就在对应的视图函数中来实现课程学习人数的动态改变,视图函数def course_video(request, course_id)中,判断了用户是否学习过这个课程,那么我们可以直接在后面追加学习人数
机构学习人数,我们根据用户学习的所有课程,找到对应的机构,然后对机构的学习人数做加1操作。
def course_video(request, course_id): if course_id: course = CourseInfo.objects.filter(id=course_id)[0] # 当用户点击开始学习以后,代表这个用户学习了这个课程,我们需要去判断用户的学习表里是否有这个课程,如果没有责需要把这个课程加到用户学习表里。 usercourse_list = UserCourse.objects.filter(study_man=request.user, study_course=course) if not usercourse_list: a = UserCourse() a.study_man = request.user a.study_course = course a.save() course.study_num += 1 # 课程加1 course.save() # 1、从学习课程的表中查找当前这个人学习的所有课程 usercourse_list = UserCourse.objects.filter(study_man=request.user) course_list = [usercourse.study_course for usercourse in usercourse_list] # 2、 根据拿到的所有课程,找到每个课程的机构 org_list = list(set([course.orginfo for course in course_list])) if course.orginfo not in org_list: course.orginfo.study_num += 1 course.orginfo.save() # 学过该课程的同学还学过什么 # 1、从中间表用户课程表当中找到学过该课的所有对象 usercourse_list = UserCourse.objects.filter(study_course=course) # 2、根据找到的用户学习课程列表,遍历拿到所有学习过这门课的用户列表 user_list =[usercourse.study_man for usercourse in usercourse_list] # 3、再根据找到的用户,从中间用户学习课程表中,找到所有用户学习其他课程的整个对象 usercourse_list = UserCourse.objects.filter(study_man__in=user_list).exclude(study_course=course) # 4、从获取到的用户课程列表中,拿到我们需要的其他课程(去重) course_list = list(set([usercourse.study_course for usercourse in usercourse_list])) return render(request, 'courses/course-video.html', { 'course': course, 'course_list': course_list, })