views.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # coding=utf-8
  2. from utils.custom_modelviewset import CustomModelViewSet
  3. from rest_framework.views import APIView
  4. from django.db.models import Q
  5. import traceback
  6. from rest_framework.decorators import action
  7. import json
  8. from apps.tenant.poster.models import Poster
  9. from utils.permission import IsTenantUser, IsAdministratorUser
  10. from apps.tenant.poster.serializer import PosterSerializer
  11. from apps.log.models import BizLog
  12. from apps.tenant import tenant_log
  13. from apps.tenant.poster.filters import PosterFilter
  14. from django.db import transaction
  15. from utils.exceptions import CustomError
  16. from utils import response_ok, response_error
  17. class PosterViewSet(CustomModelViewSet):
  18. permission_classes = [IsAdministratorUser, ]
  19. queryset = Poster.objects.filter()
  20. serializer_class = PosterSerializer
  21. def filter_queryset(self, queryset):
  22. queryset = queryset.filter()
  23. f = PosterFilter(self.request.GET, queryset=queryset)
  24. return f.qs
  25. def create(self, request, *args, **kwargs):
  26. data = json.loads(request.POST.get('data'))
  27. banner_img = request.FILES.get('banner_img')
  28. with transaction.atomic():
  29. data['create_user'] = request.user
  30. poster = Poster.objects.create(**data)
  31. poster._add_img(banner_img)
  32. BizLog.objects.addnew(None, request.user, BizLog.INSERT, u'添加轮播信息', data)
  33. return response_ok()
  34. @action(methods=['post'], detail=True)
  35. def update_poster(self, request, pk):
  36. data = json.loads(request.POST.get('data'))
  37. # data = {'title': '644', 'content': '发斯蒂芬44', 'location': '1', 'enable': '1'}
  38. banner_img = request.FILES.get('banner_img')
  39. try:
  40. with transaction.atomic():
  41. Poster.objects.filter(id=pk).update(**data)
  42. poster = self.get_object()
  43. if banner_img:
  44. poster.del_images()
  45. poster._add_img(banner_img)
  46. except CustomError as e:
  47. return response_error(e.get_error_msg())
  48. except Exception as e:
  49. return response_error(str(e))
  50. return response_ok()