106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
from rest_framework.mixins import ListModelMixin
 | 
						|
from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoSerializer
 | 
						|
from apps.vod.models import Video, ViewRecord
 | 
						|
from django.shortcuts import render
 | 
						|
from .vodclient import getAllClass, searchMedia, getSignature
 | 
						|
from rest_framework.views import APIView
 | 
						|
from rest_framework.response import Response
 | 
						|
from rest_framework.viewsets import GenericViewSet, ModelViewSet
 | 
						|
from utils.pagination import PageOrNot
 | 
						|
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
 | 
						|
# Create your views here.
 | 
						|
 | 
						|
class ClassView(APIView):
 | 
						|
 | 
						|
    perms_map={'get':'*'}
 | 
						|
    def get(self, request, format=None):
 | 
						|
        """
 | 
						|
        查询分类
 | 
						|
        """
 | 
						|
        return getAllClass()
 | 
						|
 | 
						|
class VideoView(APIView):
 | 
						|
 | 
						|
    perms_map={'get':'video_view'}
 | 
						|
    def get(self, request, format=None):
 | 
						|
        """
 | 
						|
        查询视频
 | 
						|
        """
 | 
						|
        params={'Filters':['basicInfo', 'metaData']}
 | 
						|
        params['Offset'] = request.query_params.get('Offset', 0)
 | 
						|
        params['Limit'] = request.query_params.get('Limit', 20)
 | 
						|
        params['Names'] = request.query_params.getlist('name') if request.query_params.get('name') else []
 | 
						|
        params['ClassIds']= request.query_params.getlist('classid') if request.query_params.get('classid') else []
 | 
						|
        return searchMedia(params)
 | 
						|
 | 
						|
class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet):
 | 
						|
    perms_map={'get':'video_view', 'post':'video_create', 'put':'video_update', 'delete':'video_delete'}
 | 
						|
    queryset = Video.objects.all()
 | 
						|
    search_fields = ['name', 'category__name', 'description']
 | 
						|
    filterset_fields = ['category']
 | 
						|
    serializer_class = VideoSerializer
 | 
						|
    ordering = ['-views', '-create_time']
 | 
						|
 | 
						|
    @action(methods=['get'], detail=False, perms_map={'get':'video_view'})
 | 
						|
    def myview(self, request, *args, **kwargs):
 | 
						|
        """
 | 
						|
        个人观看记录
 | 
						|
        """
 | 
						|
        queryset = ViewRecord.objects.filter(user=request.user)
 | 
						|
        page = self.paginate_queryset(queryset)
 | 
						|
        if page is not None:
 | 
						|
            serializer = self.get_serializer(page, many=True)
 | 
						|
            return self.get_paginated_response(serializer.data)
 | 
						|
        serializer = self.get_serializer(queryset, many=True)
 | 
						|
        return Response(serializer.data)
 | 
						|
 | 
						|
 | 
						|
class VRecordViewSet(ListModelMixin, GenericViewSet):
 | 
						|
    perms_map = {'get':'viewrecord_view'}
 | 
						|
    queryset = ViewRecord.objects.all()
 | 
						|
    search_fields = ['user__name', 'video__name']
 | 
						|
    serializer_class = VRecordSerializer
 | 
						|
    ordering = ['-update_time']
 | 
						|
    
 | 
						|
 | 
						|
    
 | 
						|
class MyViewRecordAPIView(APIView):
 | 
						|
 | 
						|
    permission_classes = [IsAuthenticated]
 | 
						|
    def get(self, request, id , format=None):
 | 
						|
        """
 | 
						|
        该视频的本人观看信息
 | 
						|
        """
 | 
						|
        try:
 | 
						|
            video = Video.objects.get(pk=id)
 | 
						|
        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 = VRecordSerializer(instance=record)
 | 
						|
        return Response(serializer.data)
 | 
						|
 | 
						|
    def put(self, request, id, format=None):
 | 
						|
        """
 | 
						|
        更新该视频本人的观看信息
 | 
						|
        """
 | 
						|
        try:
 | 
						|
            video = Video.objects.get(pk=id)
 | 
						|
        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)
 | 
						|
 | 
						|
class SignatureAPIView(APIView):
 | 
						|
    perms_map={'get':'video_create'}
 | 
						|
    def get(self, request, format=None):
 | 
						|
        """
 | 
						|
        获取上传签名
 | 
						|
        """
 | 
						|
        return Response(getSignature(procedure=request.query_params.get('procedure', None)))
 |