46、python_django_web开发_完成相关课程的推荐与给View加验证_笔记
学过这门课程的同学 还学过什么其他课程 - # 学过这门课程的用户的id
- user_courses = course.usercourse_set.all()
- user_ids = [user_course.user.id for user_course in user_courses]
- # 所有的用户 查询每个用户学习的课程 肯定有重复的
- # __in的意思是只要这个user_id在列表user_ids里面 我们都会把记录返回 django model用法
- all_user_courses = UserCourse.objects.filter(user_id__in=user_ids)
- # 下面来取课程的id
- course_ids = [all_user_course.course.id for all_user_course in all_user_courses]
- # 根据课程id来取课程对象
- relate_courses = Course.objects.filter(id__in=course_ids).order_by('-click_num')[:5]
复制代码
进入view之前必须确保用户已经登录了 涉及给view添加验证
View进来之前进行一个用户登录的验证 mixin一般放基础的view用来被继承 - from django.contrib.auth.decorators import login_required
- from django.utils.decorators import method_decorator
- __author__ = 'dongfangyao'
- __date__ = '2017/11/29 下午4:49'
- __product__ = 'PyCharm'
- __filename__ = 'mixin_utils'
- class LoginRequiredMixin(object):
- @method_decorator(login_required(login_url='/login/'))
- def dispatch(self, request, *args, **kwargs):
- return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
复制代码
用户点击开始学习按钮后 必须将用户与课程进行关联 - # 查询用户是否已经关联了课程
- user_course_exist = UserCourse.objects.filter(user=request.user, course=course)
- if not user_course_exist:
- user_course_object = UserCourse(user=request.user, course=course)
- user_course_object.save()
复制代码
|