本文共 9141 字,大约阅读时间需要 30 分钟。
目录
前端分页代码,注意第一行的
all_courses.object_list
插入课程页表
{% for course in all_courses.object_list %}{% endfor %}{ { course.course_org.name }} { { course.fav_number }}
改变下标页码
views.py
class CourseList(View): def get(self,request): all_courses = Course.objects.all() try: page = int(request.GET.get('page', 1))#这里要做一下int转换,这里的request.GET.get('page', 1)中的page是Django在分页时自动生成的 except PageNotAnInteger: page = 1 paginator = Paginator(all_courses,6,request=request)#每页显示条数3 courses = paginator.page(page) return render(request,'course-list.html',{ 'all_courses': courses, # 'sort':sort })
排序:
views.py
def get(self,request): all_courses = Course.objects.all() #课程排序 sort = request.GET.get('sort','') if sort: if sort == 'hot': all_courses = all_courses.order_by('-click_number') elif sort == 'students': all_courses = all_courses.order_by('-students') try: page = int(request.GET.get('page', 1))#这里要做一下int转换,这里的request.GET.get('page', 1)中的page是Django在分页时自动生成的 except PageNotAnInteger: page = 1 paginator = Paginator(all_courses,6,request=request)#每页显示条数3 courses = paginator.page(page) return render(request,'course-list.html',{ 'all_courses': courses, 'sort':sort })
前端代码
后台代码
courses.views.py
class CourseDetail(View): def get(self,request,course_id): if request.user.is_authenticated: username = request.user else: username = '未登录,请点击登陆' course = Course.objects.get(id = course_id) course.click_nums+=1 course.save()#记录点击课程的次数 return render(request,'course-detail.html',{ 'course':course, 'username': username, })
courses.uels.py
urlpatterns = [ #name 的作用是在前端配置路由的时候使用 url 'message:getpost'这个getpost是name = 'getpost'中的getpost path('list/',CourseList.as_view(), name="course_list"), re_path('detail/(?P\d)/$',CourseDetail.as_view(), name="course_detail"),]
courses.models.py
class Course(models.Model):#定义课程 course_org = models.ForeignKey(CourseOrg,verbose_name="课程机构",null=True,on_delete=models.CASCADE) name = models.CharField(max_length=50,verbose_name=u"课程") desc = models.CharField(max_length=300,verbose_name=u"课程描述") detail = models.TextField(verbose_name=u"课程详情") degree = models.CharField(choices=(("cj",u"初级"),('zj',u"中级"),('gj',u"高级")),max_length=5)#课程难度 learn_times = models.IntegerField(default=0,verbose_name=u"学习时长(分钟数)") student = models.IntegerField(default=0,verbose_name=u"学习人数") fav_nums= models.IntegerField(default=0,verbose_name=u"收藏人数") image = models.ImageField(upload_to="courses/%Y/%m",verbose_name=u"封面") click_nums = models.IntegerField(default=0,verbose_name=u"课程点击数") add_time = models.DateTimeField(default=datetime.now,verbose_name=u"课程添加时间") class Meta: verbose_name = u"课程" verbose_name_plural = verbose_name def __str__(self): return self.name def get_lesson_count(self): lesson_count = self.lesson_set.all().count()#获取到这门课程的所有章节数,前提是course是lesson的外键,不在同一文件下也可以用 return lesson_count
部分后台代码
直接在前端调用course中的一个方法(get_lesson_count)
courses.views.py
class CourseDetail(View): def get(self,request,course_id): course = Course.objects.get(id = course_id) course.click_nums+=1 course.save()#记录点击课程的次数 course_has_fav = False org_has_fav = False if request.user.is_authenticated: username = request.user user = UserProfile.objects.get(Q(username=username) | Q(email=username)) user_id = user.id if UserFavorate.objects.filter(user_id=user_id, fav_id=course.id, fav_type=1):#从数据库中查询 course_has_fav = True if UserFavorate.objects.filter(user_id = user_id ,fav_id = course.course_org.id,fav_type = 2): org_has_fav = True else: username = '未登录,请点击登陆' tag = course.tag if tag: relate_course = Course.objects.filter(tag = tag) relate_course = relate_course.exclude(id = course.id)[:1]#將當前課程排除在推薦課程之外 else: relate_course = [] return render(request,'course-detail.html',{ 'course':course, 'username': username, 'relate_course':relate_course, 'course_has_fav':course_has_fav, 'org_has_fav':org_has_fav })
收藏前端代码:
js相应(course_detail):
{% block js %} {% endblock %}
判断是否已收藏:
{% ifequal org_has_fav False %} 收藏 {% endifequal %} {% ifequal org_has_fav True %} 已收藏 {% endifequal %}
8.5 忘记写了
后台,先判断 是否登陆,再通过user_id拿到改用户所学过的所有课程
class CourseCommentView(View): def get(self,request,course_id): course = Course.objects.get(id = int(course_id)) resources = CourseResource.objects.filter(course = course) all_comments = CourseComment.objects.filter(course = course) # pdb.set_trace() if request.user.is_authenticated: username = request.user user = UserProfile.objects.get(Q(username=username) | Q(email=username)) user_id = user.id usercourse = UserCourse.objects.filter(user_id = user_id)[:5] return render(request,'course-comment.html',{ 'course':course, 'resources':resources, 'all_comments':all_comments, 'usercourse': usercourse })
前端:一般操作
登陆验证:
后台:在utils文件夹下新增mixin_utils.py文件(前提是utils已经在sittings中注册过路径了)
sittings.py:
sys.path.insert(2,os.path.join(BASE_DIR,"utils"))mixin_utils.py
from django.contrib.auth.decorators import login_requiredfrom django.utils.decorators import method_decoratorclass LoginRequiredMixin(object): @method_decorator(login_required(login_url='/index/login/'))#调用装饰器 def dispatch(self,request,*args,**kwargs):#函数名称和参数是固定的,不可修改 return super(LoginRequiredMixin,self).dispatch(request,*args,**kwargs)courses.views.py
class CourseInfoVideo(LoginRequiredMixin,View):#继承登陆验证函数,如果未登录则调转到登陆页面class CourseCommentView(LoginRequiredMixin,View):
将课程和用户进行关联
后台关联代码:
class CourseInfoVideo(LoginRequiredMixin,View):#继承登陆验证函数,如果未登录则调转到登陆页面 def get(self,request,course_id): course = Course.objects.get(id = int(course_id)) resources = CourseResource.objects.filter(course = course) # pdb.set_trace() if request.user.is_authenticated:#该同学还学过哪些课程 username = request.user user = UserProfile.objects.get(Q(username=username) | Q(email=username)) user_id = user.id usercourse = UserCourse.objects.filter(user_id = user_id)[:5] user_course = UserCourse.objects.filter(user = username,course = course) if not user_course:#如果当前用户的课程学习没有保存这个门课程,这将这门课程保存到,这样用户的信息下 user_course = UserCourse(user = username,course = course) user_course.save() return render(request,'course-video.html',{ 'course':course, 'resources':resources, 'usercourse':usercourse }) if not user_course:#如果当前用户的课程学习没有保存这个门课程,这将这门课程保存到,这样用户的信息下 user_course = UserCourse(user = username,course = course) user_course.save() return render(request,'course-video.html',{ 'course':course, 'resources':resources, 'usercourse':usercourse })
使用 video.js 插件制作
转载地址:http://drnvb.baihongyu.com/