From b73ca096ef6709af4449a4ce3c5fb2eb153b3a06 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 6 Jul 2021 10:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E8=A7=82=E7=9C=8B=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client_mp/common/http.api.js | 4 +++- client_mp/pages/vod/video.vue | 6 ++++++ server/apps/vod/models.py | 5 +++-- server/apps/vod/views.py | 26 ++++++++++++-------------- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/client_mp/common/http.api.js b/client_mp/common/http.api.js index 70a6e89..6b6df20 100644 --- a/client_mp/common/http.api.js +++ b/client_mp/common/http.api.js @@ -43,6 +43,7 @@ const install = (Vue, vm) => { let getDocument = (params={})=>vm.$u.get('/quality/document/', params);//文档 let getVideos = (params={})=>vm.$u.get('/vod/video/', params);//点播视频 let getDickey = (params={})=>vm.$u.get('/system/dict/', params);//查询字典 + let addVodView =(id)=>vm.$u.post(`/vod/video/${id}/view/`);//新增观看次数 vm.$u.api = {getUserInfo, getCode, codeLogin, @@ -62,7 +63,8 @@ const install = (Vue, vm) => { startInspectDept, getDocument, getVideos, - getDickey + getDickey, + addVodView }; } diff --git a/client_mp/pages/vod/video.vue b/client_mp/pages/vod/video.vue index 65902cf..cb1ac62 100644 --- a/client_mp/pages/vod/video.vue +++ b/client_mp/pages/vod/video.vue @@ -103,6 +103,12 @@ if (e.type == 'play') { var playingVideoStr = e.target.id this.list[this.swiperIndex].content[index].showTitle = false + if(this.list[this.swiperIndex].content[index]){ + + }else{ + this.$u.api.addVodView(this.list[this.swiperIndex].content[index].id).then(res=>{ + this.list[this.swiperIndex].content[index].played = true + })} //暂停其他视频播放 if(this.playingVideoStr==null){ this.playingVideoStr = playingVideoStr diff --git a/server/apps/vod/models.py b/server/apps/vod/models.py index b1c1595..bb131f8 100644 --- a/server/apps/vod/models.py +++ b/server/apps/vod/models.py @@ -13,6 +13,7 @@ class Video(CommonAModel): coverurl = models.CharField(verbose_name='封面地址', max_length=200) duration = models.IntegerField(verbose_name='时长(秒)', default=0) views = models.IntegerField(verbose_name='观看次数', default=0) + viewsp = models.IntegerField(verbose_name='观看人数', default=0) class Meta: verbose_name = '点播视频' @@ -25,8 +26,8 @@ class ViewRecord(BaseModel): # 观看记录 user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='观看人', related_name='viewrecord_user') - num = models.IntegerField(verbose_name='观看次数', default=0) - current = models.IntegerField(verbose_name='当前观看进度', default=0) + views = models.IntegerField(verbose_name='观看次数', default=0) + current = models.IntegerField(verbose_name='当前观看进度(秒)', default=0) video = models.ForeignKey(Video, verbose_name='点播视频', on_delete=models.CASCADE) diff --git a/server/apps/vod/views.py b/server/apps/vod/views.py index ca614d1..a0f1c4d 100644 --- a/server/apps/vod/views.py +++ b/server/apps/vod/views.py @@ -1,3 +1,5 @@ +from datetime import timedelta +from time import timezone from rest_framework.mixins import ListModelMixin from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoSerializer from apps.vod.models import Video, ViewRecord @@ -11,6 +13,7 @@ from apps.system.mixins import CreateUpdateModelAMixin from rest_framework.decorators import action, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.status import HTTP_400_BAD_REQUEST +from django.utils import timezone # Create your views here. class ClassView(APIView): @@ -56,16 +59,6 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) - - @action(methods=['post'], detail=True, permission_classes=[IsAuthenticated]) - def view(self, request, *args, **kwargs): - """ - 新增观看次数 - """ - obj = self.get_object() - obj.views = obj.views + 1 - obj.save() - return Response() class VRecordViewSet(ListModelMixin, GenericViewSet): @@ -101,10 +94,15 @@ class MyViewRecordAPIView(APIView): except: return Response('视频不存在', status=HTTP_400_BAD_REQUEST) record = ViewRecord.objects.get_or_create(video=video, user=request.user, defaults={'video':video, 'user':request.user}) - serializer = VRecordUpdateSerializer(record, data=request.data) - serializer.is_valid(raise_exception=True) - serializer.save() - return Response(serializer.data) + if request.data: + serializer = VRecordUpdateSerializer(record, data=request.data) + serializer.is_valid(raise_exception=True) + if request.data.get('current', None): + record.current = request.data.get('current') + if timezone.now() > record.update_time + timedelta(hours=6): + record.views = record.views + 1 + record.save() + return Response() class SignatureAPIView(APIView): perms_map={'get':'video_create'}