个人观看记录更新

This commit is contained in:
caoqianming 2021-07-06 10:03:59 +08:00
parent ddba9c0b9a
commit b73ca096ef
4 changed files with 24 additions and 17 deletions

View File

@ -43,6 +43,7 @@ const install = (Vue, vm) => {
let getDocument = (params={})=>vm.$u.get('/quality/document/', params);//文档 let getDocument = (params={})=>vm.$u.get('/quality/document/', params);//文档
let getVideos = (params={})=>vm.$u.get('/vod/video/', params);//点播视频 let getVideos = (params={})=>vm.$u.get('/vod/video/', params);//点播视频
let getDickey = (params={})=>vm.$u.get('/system/dict/', params);//查询字典 let getDickey = (params={})=>vm.$u.get('/system/dict/', params);//查询字典
let addVodView =(id)=>vm.$u.post(`/vod/video/${id}/view/`);//新增观看次数
vm.$u.api = {getUserInfo, vm.$u.api = {getUserInfo,
getCode, getCode,
codeLogin, codeLogin,
@ -62,7 +63,8 @@ const install = (Vue, vm) => {
startInspectDept, startInspectDept,
getDocument, getDocument,
getVideos, getVideos,
getDickey getDickey,
addVodView
}; };
} }

View File

@ -103,6 +103,12 @@
if (e.type == 'play') { if (e.type == 'play') {
var playingVideoStr = e.target.id var playingVideoStr = e.target.id
this.list[this.swiperIndex].content[index].showTitle = false 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){ if(this.playingVideoStr==null){
this.playingVideoStr = playingVideoStr this.playingVideoStr = playingVideoStr

View File

@ -13,6 +13,7 @@ class Video(CommonAModel):
coverurl = models.CharField(verbose_name='封面地址', max_length=200) coverurl = models.CharField(verbose_name='封面地址', max_length=200)
duration = models.IntegerField(verbose_name='时长(秒)', default=0) duration = models.IntegerField(verbose_name='时长(秒)', default=0)
views = models.IntegerField(verbose_name='观看次数', default=0) views = models.IntegerField(verbose_name='观看次数', default=0)
viewsp = models.IntegerField(verbose_name='观看人数', default=0)
class Meta: class Meta:
verbose_name = '点播视频' verbose_name = '点播视频'
@ -25,8 +26,8 @@ class ViewRecord(BaseModel):
# 观看记录 # 观看记录
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='观看人', related_name='viewrecord_user') user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='观看人', related_name='viewrecord_user')
num = models.IntegerField(verbose_name='观看次数', default=0) views = models.IntegerField(verbose_name='观看次数', default=0)
current = models.IntegerField(verbose_name='当前观看进度', default=0) current = models.IntegerField(verbose_name='当前观看进度(秒)', default=0)
video = models.ForeignKey(Video, verbose_name='点播视频', on_delete=models.CASCADE) video = models.ForeignKey(Video, verbose_name='点播视频', on_delete=models.CASCADE)

View File

@ -1,3 +1,5 @@
from datetime import timedelta
from time import timezone
from rest_framework.mixins import ListModelMixin from rest_framework.mixins import ListModelMixin
from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoSerializer from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoSerializer
from apps.vod.models import Video, ViewRecord 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.decorators import action, permission_classes
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.status import HTTP_400_BAD_REQUEST from rest_framework.status import HTTP_400_BAD_REQUEST
from django.utils import timezone
# Create your views here. # Create your views here.
class ClassView(APIView): class ClassView(APIView):
@ -56,16 +59,6 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True) serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data) 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): class VRecordViewSet(ListModelMixin, GenericViewSet):
@ -101,10 +94,15 @@ class MyViewRecordAPIView(APIView):
except: except:
return Response('视频不存在', status=HTTP_400_BAD_REQUEST) return Response('视频不存在', status=HTTP_400_BAD_REQUEST)
record = ViewRecord.objects.get_or_create(video=video, user=request.user, defaults={'video':video, 'user':request.user}) record = ViewRecord.objects.get_or_create(video=video, user=request.user, defaults={'video':video, 'user':request.user})
serializer = VRecordUpdateSerializer(record, data=request.data) if request.data:
serializer.is_valid(raise_exception=True) serializer = VRecordUpdateSerializer(record, data=request.data)
serializer.save() serializer.is_valid(raise_exception=True)
return Response(serializer.data) 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): class SignatureAPIView(APIView):
perms_map={'get':'video_create'} perms_map={'get':'video_create'}