views.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from rest_framework import viewsets
  2. from .models import ListModel
  3. from . import serializers
  4. from utils.page import MyPageNumberPagination
  5. from rest_framework.filters import OrderingFilter
  6. from django_filters.rest_framework import DjangoFilterBackend
  7. from rest_framework.response import Response
  8. from .filter import Filter
  9. from rest_framework.exceptions import APIException
  10. class APIViewSet(viewsets.ModelViewSet):
  11. """
  12. retrieve:
  13. Response a data list(get)
  14. list:
  15. Response a data list(all)
  16. create:
  17. Create a data line(post)
  18. delete:
  19. Delete a data line(delete)
  20. partial_update:
  21. Partial_update a data(patch:partial_update)
  22. update:
  23. Update a data(put:update)
  24. """
  25. pagination_class = MyPageNumberPagination
  26. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  27. ordering_fields = ['id', "create_time", "update_time", ]
  28. filter_class = Filter
  29. def get_project(self):
  30. try:
  31. id = self.kwargs.get('pk')
  32. return id
  33. except:
  34. return None
  35. def get_queryset(self):
  36. id = self.get_project()
  37. if self.request.user:
  38. if id is None:
  39. return ListModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
  40. else:
  41. return ListModel.objects.filter(openid=self.request.auth.openid, id=id, is_delete=False)
  42. else:
  43. return ListModel.objects.none()
  44. def get_serializer_class(self):
  45. if self.action in ['list', 'retrieve', 'destroy']:
  46. return serializers.CompanyGetSerializer
  47. elif self.action in ['create']:
  48. return serializers.CompanyPostSerializer
  49. elif self.action in ['update']:
  50. return serializers.CompanyUpdateSerializer
  51. elif self.action in ['partial_update']:
  52. return serializers.CompanyPartialUpdateSerializer
  53. else:
  54. return self.http_method_not_allowed(request=self.request)
  55. def create(self, request, *args, **kwargs):
  56. data = self.request.data
  57. data['openid'] = self.request.auth.openid
  58. if ListModel.objects.filter(openid=data['openid'], company_name=data['company_name'], is_delete=False).exists():
  59. raise APIException({"detail": "Data exists"})
  60. else:
  61. if ListModel.objects.filter(openid=data['openid'], is_delete=False).count() >= 1:
  62. raise APIException({"detail": "You Just Can Create 1 Company"})
  63. else:
  64. serializer = self.get_serializer(data=data)
  65. serializer.is_valid(raise_exception=True)
  66. serializer.save()
  67. headers = self.get_success_headers(serializer.data)
  68. return Response(serializer.data, status=200, headers=headers)
  69. def update(self, request, pk):
  70. qs = self.get_object()
  71. if qs.openid != self.request.auth.openid:
  72. raise APIException({"detail": "Cannot update data which not yours"})
  73. else:
  74. data = self.request.data
  75. serializer = self.get_serializer(qs, data=data)
  76. serializer.is_valid(raise_exception=True)
  77. serializer.save()
  78. headers = self.get_success_headers(serializer.data)
  79. return Response(serializer.data, status=200, headers=headers)
  80. def partial_update(self, request, pk):
  81. qs = self.get_object()
  82. if qs.openid != self.request.auth.openid:
  83. raise APIException({"detail": "Cannot partial_update data which not yours"})
  84. else:
  85. data = self.request.data
  86. serializer = self.get_serializer(qs, data=data, partial=True)
  87. serializer.is_valid(raise_exception=True)
  88. serializer.save()
  89. headers = self.get_success_headers(serializer.data)
  90. return Response(serializer.data, status=200, headers=headers)
  91. def destroy(self, request, pk):
  92. qs = self.get_object()
  93. if qs.openid != self.request.auth.openid:
  94. raise APIException({"detail": "Cannot delete data which not yours"})
  95. else:
  96. qs.is_delete = True
  97. qs.save()
  98. serializer = self.get_serializer(qs, many=False)
  99. headers = self.get_success_headers(serializer.data)
  100. return Response(serializer.data, status=200, headers=headers)