from django.shortcuts import render from rest_framework import mixins from rest_framework import viewsets from .models import Product from product.serializers import * from rest_framework.status import HTTP_200_OK, HTTP_400_BAD_REQUEST from rest_framework.response import Response from rest_framework import status from users.models import User from collection.models import Collection from rest_framework.renderers import JSONRenderer from config_default import configs from qiniu import Auth import time import random import string from rest_framework.permissions import AllowAny, IsAuthenticatedOrReadOnly, IsAuthenticated import requests from django.core.paginator import Paginator,EmptyPage, PageNotAnInteger from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination from django.http import HttpResponse from rest_framework.authtoken.models import Token import json from django.core import serializers from qiniu import BucketManager # Create your views here. # 对商品列表进行整理 def sort_out_list(request, data): # 构建鉴权对象 q = Auth(configs.get('qiniu').get('AK'), configs.get('qiniu').get('SK')) base_url = configs.get('qiniu').get('domain') + '/' new_data = [] for obj in data: # 获取商品图片链接,整理成数组 imgs = [] img1_url = base_url + obj.get('goods_img1') private_url = q.private_download_url(img1_url, expires=3600) # ret = requests.get(private_url + '?imageInfo') # print(ret) # print(private_url) imgs.append(private_url) if obj.get('goods_img2'): img2_url = base_url + obj.get('goods_img2') private_url = q.private_download_url(img2_url, expires=3600) imgs.append(private_url) if obj.get('goods_img3'): img3_url = base_url + obj.get('goods_img3') private_url = q.private_download_url(img3_url, expires=3600) imgs.append(private_url) if obj.get('goods_img4'): img4_url = base_url + obj.get('goods_img4') private_url = q.private_download_url(img4_url, expires=3600) imgs.append(private_url) # 获取商品用户头像 product_username = obj.get('username') try: product_user = User.objects.get(username__exact=product_username) except User.DoesNotExist: product_user = None if product_user.user_image_url: head_url = base_url + product_user.user_image_url product_avatar_url = q.private_download_url(head_url, expires=3600) else: product_avatar_url = None # 获取用户的收藏状态 try: c = Collection.objects.get(username=str(request.user), product_id=obj.get('id')) except Collection.DoesNotExist: c = None if c: collect_state = True else: collect_state = False # 对时间字符串进行整理 date = obj.get('c_time').split(".")[0] year = date.split("T")[0] time = date.split("T")[1] new_obj = { 'product_id': obj.get('id'), 'user_id': product_user.id, 'username': obj.get('username'), 'avatar_url': product_avatar_url, 'goods_price': obj.get('goods_price'), 'goods_img_url': imgs, 'collect_state': collect_state, 'title': obj.get('title'), 'description': obj.get('description'), 'time': year + " " + time, 'first_img_width_height': obj.get('first_img_width_height') } new_data.append(new_obj) msg = { 'stateCode': 200, 'list': new_data } return msg # 获取商品列表 class ProductListViewset(viewsets.ModelViewSet): def get(self, request): if request.user.is_authenticated: # 获取所有数据 roles = Product.objects.all() # 创建分页对象 pg = PageNumberPagination() # pg = MyLimitOffsetPagination() # 获取分页的数据 page_roles = pg.paginate_queryset(queryset=roles, request=request, view=self) # 对数据进行序列化 ser = ProductSerializer(instance=page_roles, many=True) # print('ser.data的类型:' + str(ser.data)) msg = sort_out_list(request, ser.data) return Response(msg, status=HTTP_200_OK) else: msg = { 'stateCode': 201, 'msg': '没有访问权限' } return Response(msg, 201) # 获取搜索列表,暂时不分页 class SearchListViewset(viewsets.ModelViewSet): def get(self, request): if request.user.is_authenticated: # data = request.data key = request.GET.get('key') search_list = Product.objects.filter(title__contains=key) # paginator = Paginator(search_list, 5) # try: # search = paginator.page(data.get('page')) # except PageNotAnInteger: # search = paginator.page(1) # except EmptyPage: # search = paginator.page(paginator.num_pages) # # print(search) # search_list = json.loads(serializers.serialize("json", search_list)) ser = ProductSerializer(instance=search_list, many=True) # print(ser.data) msg = sort_out_list(request, ser.data) return Response(msg, 200) else: msg = { 'stateCode': 201, 'msg': '没有访问权限' } return Response(msg, 201) # 获取我的发布列表 class MyPublishListViewset(viewsets.ModelViewSet): def get(self, request): if request.user.is_authenticated: try: my_publish_list = Product.objects.filter(username=str(request.user)) except Product.DoesNotExist: my_publish_list = None ser = ProductSerializer(instance=my_publish_list, many=True) msg = sort_out_list(request, ser.data) return Response(msg, 200) else: msg = { 'stateCode': 201, 'msg': '没有访问权限' } return Response(msg, 201) # 发布交易信息 class PublishViewset(viewsets.ModelViewSet): queryset = Product.objects.all() serializer_class = ProductSerializer permission_classes = (AllowAny,) def post(self, request): data = request.data # username = data.get('username') serializer = ProductSerializer(data=data) if request.user.is_authenticated: # print(data) if serializer.is_valid(raise_exception=True): serializer.save() return Response({"stateCode": 200, "msg": "发布成功"}, 200) return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) else: return Response({"stateCode": 201, "msg": "没有上传权限"}, 201)