diff --git a/KUA/student/urls.py b/KUA/student/urls.py index 49d06e7..b236525 100644 --- a/KUA/student/urls.py +++ b/KUA/student/urls.py @@ -15,5 +15,5 @@ path('get-now-points/', views.GetNowPointView().as_view()), path('user-info/', views.UserStudentInfoView.as_view()), path('get-point-history/', views.GetPointHistoryView.as_view()), - # path('image/', views.ImageView().as_view()), + path('image/', views.ImageView().as_view()), ] \ No newline at end of file diff --git a/KUA/student/views.py b/KUA/student/views.py index 591e441..ab32e92 100644 --- a/KUA/student/views.py +++ b/KUA/student/views.py @@ -16,7 +16,7 @@ from datetime import timedelta from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi - +from rest_framework.parsers import MultiPartParser, FormParser # 이메일 코드 전송 기능 @@ -481,45 +481,46 @@ def get(self, request): return Response("Student not found", status=400) -# class ImageView(APIView): -# authentication_classes = [TokenAuthentication] -# permission_classes = [IsAuthenticated] -# serializer_class = serializers.ImageSerializer - -# @swagger_auto_schema( -# operation_summary="이미지 생성하기", -# operation_description="이미지 이름, 태그, 이미지 데이터를 생성합니다.", -# manual_parameters=[ -# openapi.Parameter('name', openapi.IN_FORM, type=openapi.TYPE_STRING, description='이미지 이름'), -# openapi.Parameter('tag', openapi.IN_FORM, type=openapi.TYPE_STRING, description='이미지 태그'), -# openapi.Parameter('image_uploads', openapi.IN_FORM, type=openapi.TYPE_FILE, description='이미지 파일 업로드'), -# ], -# responses={ -# 201: openapi.Response(description="Success"), -# 400: openapi.Response(description="Rejected") -# } -# ) -# def post(self, request, *args, **kwargs): -# name = request.data.get('name') -# tag = request.data.get('tag') -# image_uploads = request.FILES.getlist('image_uploads', []) - -# # 이미지가 여러 개 업로드된 경우 에러 반환 -# if len(image_uploads) > 1: -# return Response({"error": "Only one image can be uploaded at a time."}, status=400) - -# # 이미지가 없는 경우 에러 반환 -# if not image_uploads: -# return Response({"error": "No image uploaded."}, status=400) - -# data = { -# "name": name, -# "tag": tag, -# "image": image_uploads[0], # 이미지를 직렬화할 데이터에 포함시킴 -# } - -# serializer = self.get_serializer(data=data) -# serializer.is_valid(raise_exception=True) -# serializer.save() # 이미지를 포함하여 저장 - -# return Response(serializer.data, status=201) +class ImageView(APIView): + authentication_classes = [TokenAuthentication] + permission_classes = [IsAuthenticated] + serializer_class = serializers.ImageSerializer + parser_classes = [MultiPartParser, FormParser] + + @swagger_auto_schema( + operation_summary="이미지 생성하기", + operation_description="이미지 이름, 태그, 이미지 데이터를 생성합니다.", + manual_parameters=[ + openapi.Parameter('name', openapi.IN_FORM, type=openapi.TYPE_STRING, description='이미지 이름'), + openapi.Parameter('tag', openapi.IN_FORM, type=openapi.TYPE_STRING, description='이미지 태그'), + openapi.Parameter('image_uploads', openapi.IN_FORM, type=openapi.TYPE_FILE, description='이미지 파일 업로드'), + ], + responses={ + 201: openapi.Response(description="Success"), + 400: openapi.Response(description="Rejected") + } + ) + def post(self, request, *args, **kwargs): + name = request.data.get('name') + tag = request.data.get('tag') + image_uploads = request.FILES.getlist('image_uploads', []) + + # 이미지가 여러 개 업로드된 경우 에러 반환 + if len(image_uploads) > 1: + return Response({"error": "Only one image can be uploaded at a time."}, status=400) + + # 이미지가 없는 경우 에러 반환 + if not image_uploads: + return Response({"error": "No image uploaded."}, status=400) + + data = { + "name": name, + "tag": tag, + "image": image_uploads[0], # 이미지를 직렬화할 데이터에 포함시킴 + } + + serializer = self.get_serializer(data=data) + serializer.is_valid(raise_exception=True) + serializer.save() # 이미지를 포함하여 저장 + + return Response(serializer.data, status=201)