from apps.ecm.models import Event, EventCate, Push, PushSetting from apps.ecm.serializers import (EventCateListSerializer, EventCateUpdateSerializer, EventHandleSerializer, EventSerializer, PushSerializer, PushSettingsSerializer) from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from rest_framework.mixins import UpdateModelMixin, ListModelMixin, RetrieveModelMixin from django.db import transaction from rest_framework.decorators import action from rest_framework import serializers from django.utils import timezone from rest_framework.response import Response # Create your views here. class EventCateViewSet(UpdateModelMixin, ListModelMixin, CustomGenericViewSet): perms_map = {'put': 'eventcate:update'} queryset = EventCate.objects.all() list_serializer_class = EventCateListSerializer update_serializer_class = EventCateUpdateSerializer class PushSettingViewSet(CustomModelViewSet): queryset = PushSetting.objects.all() serializer_class = PushSettingsSerializer class EventViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet): perms_map = {'get': 'event:view'} queryset = Event.objects.all() serializer_class = EventSerializer @transaction.atomic @action(methods=['post'], detail=True, perms_map={'post': 'event:handle'}, serializer_class=EventHandleSerializer) def handle(self, request, pk=None): """ 处理事件 """ obj = self.get_object() data = request.data obj.handle_desc = data.get('handle_desc', '') obj.handle_user = request.user obj.handle_time = timezone.now() obj.save() return Response() class PushViewSet(ListModelMixin, CustomGenericViewSet): perms_map = {'get': 'push:view'} queryset = Push.objects.all() serializer_class = PushSerializer @action(methods=['get'], detail=False, perms_map={'get': '*'}) def my(self, request, *args, **kwargs): """ 推送给我的 """ user = self.request.user queryset = self.filter_queryset(self.get_queryset().filter(pusher=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)