import base64 import json from rest_framework.parsers import MultiPartParser, FileUploadParser, FormParser from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer from rest_framework.response import Response from rest_framework.views import APIView from storage.api import add_comment from storage.models import File, Comment from storage.serializers import FileSerializer, CommentSerializer from django.core.files.base import ContentFile class FileView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def get(request): tokens = request.GET.getlist('tokens', None) if not tokens: return Response("Attribute tokens not set", status=400) file_list = [] for token in tokens: try: file_list.append(FileSerializer(File.objects.get(token=token)).data) except File.DoesNotExist: file_list.append({'upload': 'error'}) return Response(file_list, status=200) class CommentView(APIView): renderer_classes = (JSONRenderer,) @staticmethod def post(request): base64_tokens = request.JSON.get('base64_tokens', None) if not base64_tokens: return Response("Attribute token not set", status=400) tokens = json.loads(base64.b64decode(base64_tokens).decode('utf-8')) comments = [] for token in tokens: try: comment = Comment.objects.get(token=token) comments.append(comment) except Comment.DoesNotExist: pass return Response([CommentSerializer(comment).data for comment in comments], status=200) class CreateCommentView(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer) parser_classes = (MultiPartParser,) @staticmethod def put(request): user_token = request.POST.get("user_token", None) text = request.POST.get("text", None) if user_token is None: return Response('user_token не передан', status=400) comment = Comment.objects.create( text=text, user_key=user_token, ) for key in request.FILES: f = request.FILES[key] fo = File( original=f, name=f.name, user_key=user_token, ) fo.save() comment.files.add(fo) return Response(CommentSerializer(comment).data, status=200)