views.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # coding=utf-8
  2. from rest_framework import generics
  3. from rest_framework.exceptions import NotFound
  4. from utils.permission import IsCustomerUser
  5. from utils import response_ok
  6. from utils.exceptions import CustomError
  7. from apps.product.models import Product
  8. from apps.product.filters import ProductFilter
  9. from apps.foundation.models import Option
  10. from apps.foundation.filters import OptionFilter
  11. from .serializers import ProductSerializer, ProductDetailSerializer, ProductTypeSerializer
  12. class ProductListView(generics.ListAPIView):
  13. permission_classes = [IsCustomerUser, ]
  14. queryset = Product.objects.filter(delete=False, enabled=True)
  15. serializer_class = ProductSerializer
  16. def filter_queryset(self, queryset):
  17. f = ProductFilter(self.request.GET, queryset=queryset)
  18. return f.qs
  19. def list(self, request, *args, **kwargs):
  20. try:
  21. data = super(ProductListView, self).list(request)
  22. except NotFound:
  23. return response_ok([])
  24. return data
  25. class ProductTypeListView(generics.ListAPIView):
  26. permission_classes = [IsCustomerUser, ]
  27. queryset = Option.objects.filter(enable=True, delete=False, type=Option.PRODUCT_CATEGORY)
  28. serializer_class = ProductTypeSerializer
  29. def filter_queryset(self, queryset):
  30. f = OptionFilter(self.request.GET, queryset=queryset)
  31. return f.qs
  32. def list(self, request, *args, **kwargs):
  33. try:
  34. data = super(ProductTypeListView, self).list(request)
  35. except NotFound:
  36. return response_ok([])
  37. return data
  38. class ProductDetailView(generics.RetrieveAPIView):
  39. permission_classes = [IsCustomerUser, ]
  40. queryset = Product.objects.filter(enabled=True, delete=False)
  41. serializer_class = ProductDetailSerializer
  42. def retrieve(self, request, *args, **kwargs):
  43. id = request.GET.get('id')
  44. instance = self.queryset.filter(id=id).first()
  45. if not instance:
  46. raise CustomError(u'未找到相应的商品!')
  47. serializer = self.get_serializer(instance)
  48. return response_ok(serializer.data)