views.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # coding=utf-8
  2. import json
  3. from django.db.models import Sum, F
  4. from django.db import transaction
  5. from django.db.models import Q
  6. from rest_framework.views import APIView
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from .serializers import *
  9. from .filters import *
  10. from apps.log.models import BizLog
  11. from apps.base import Formater
  12. from utils import response_ok, response_error
  13. from utils.permission import isLogin
  14. from apps.order.models import Order
  15. from rest_framework.decorators import action
  16. from django.contrib.auth import get_user_model
  17. User = get_user_model()
  18. class ProductView(APIView):
  19. def get(self, request):
  20. data = []
  21. queryset = Product.objects.filter(enable=True)
  22. for row in queryset:
  23. item = {
  24. 'id':row.id,
  25. 'name':row.name,
  26. 'month':row.month,
  27. }
  28. data.append(item)
  29. return response_ok(data)
  30. class DeleteProductImageView(APIView):
  31. permission_classes = [isLogin, ]
  32. def post(self, request, *args, **kwargs):
  33. # 商品图片 删除
  34. id = request.GET.get('id')
  35. try:
  36. instance = ProductImages.getById(id)
  37. image = Upload.objects.filter(id=instance.image_id).first()
  38. with transaction.atomic():
  39. instance.delete()
  40. image.del_images()
  41. except CustomError as e:
  42. return response_error(e.get_error_msg())
  43. except Exception as e:
  44. return response_error(str(e))
  45. return response_ok()
  46. class ProductViewSet(CustomModelViewSet):
  47. permission_classes = [isLogin, ]
  48. queryset = Product.objects.filter()
  49. serializer_class = ProductSerializer
  50. def filter_queryset(self, queryset):
  51. f = ProductFilter(self.request.GET, queryset=queryset)
  52. return f.qs
  53. @action(methods=['post'], detail=True)
  54. def upload_image(self, request, pk):
  55. banner_img = request.FILES.get('banner_img')
  56. try:
  57. with transaction.atomic():
  58. instance = self.get_object()
  59. upload = Upload.objects._addnew(banner_img, 'commodity_image')
  60. if upload:
  61. if instance.main_image_id:
  62. img = Upload.objects.filter(id=instance.main_image_id).first()
  63. img.del_images()
  64. instance.main_image_id = upload.id
  65. instance.save()
  66. return response_ok(upload.id)
  67. return response_error('上传失败,请重新上传!')
  68. except CustomError as e:
  69. return response_error(e.get_error_msg())
  70. except Exception as e:
  71. return response_error(str(e))
  72. @action(methods=['post'], detail=True)
  73. def upload_detail_img(self, request, pk):
  74. # 上传详情、参数图片
  75. try:
  76. with transaction.atomic():
  77. instance = self.get_object()
  78. for i in range(10):
  79. file = request.data.get('file{}'.format(i))
  80. if file:
  81. upload = Upload.objects._addnew(file, 'commodity_image')
  82. ProductImages.objects.create(product_id=instance.id,
  83. image_id=upload.id)
  84. if not upload:
  85. return response_error('上传失败,请重新上传!')
  86. except CustomError as e:
  87. return response_error(e.get_error_msg())
  88. except Exception as e:
  89. return response_error(str(e))
  90. return response_ok()
  91. @action(methods=['post'], detail=True)
  92. def query_detail_img(self, request, pk):
  93. # 查看 详情图片
  94. instance = self.get_object()
  95. data = []
  96. commodity_images = ProductImages.objects.filter(product_id=instance.id)
  97. for commodity_image in commodity_images:
  98. image = Upload.objects.filter(id=commodity_image.image_id).first()
  99. image_path = image.get_path()
  100. commodity_image_item = {
  101. 'id': commodity_image.id,
  102. 'name': commodity_image.name,
  103. 'src': image_path,
  104. }
  105. data.append(commodity_image_item)
  106. return response_ok(data)
  107. class OrderListViewSet(CustomModelViewSet):
  108. permission_classes = [isLogin, ]
  109. queryset = Order.objects.filter()
  110. serializer_class = OrderListSerializer
  111. def filter_queryset(self, queryset):
  112. queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
  113. f = OrderFilter(self.request.GET, queryset=queryset)
  114. return f.qs
  115. class OrderViewSet(CustomModelViewSet):
  116. permission_classes = [isLogin, ]
  117. queryset = Order.objects.filter()
  118. serializer_class = OrderSerializer
  119. def filter_queryset(self, queryset):
  120. queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
  121. f = OrderFilter(self.request.GET, queryset=queryset)
  122. return f.qs
  123. def create(self, request, *args, **kwargs):
  124. try:
  125. with transaction.atomic():
  126. serializer = self.get_serializer(data=request.data)
  127. if serializer.is_valid(raise_exception=True):
  128. instance = serializer.save()
  129. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  130. u'添加订单[%s],id=%d' % (instance.id), request.data)
  131. return response_ok()
  132. except CustomError as e:
  133. return response_error(e.get_error_msg())
  134. except Exception as e:
  135. import traceback
  136. traceback.print_exc()
  137. return response_error(str(e))