일단, postman에서 request.user를 처리할 때 가장 일차원적인 방법으로 해당 테스트를 진행하였다는 것을 말씀드립니다. postman을 이용한 request.user처리는 더 공부를 해봐야 알겠지만, 일단 현 상황에서 s3 업로드 테스트를 가장 빠르게 확인할 수 있는 방법이 무엇이 있을까 생각하다가 명시적으로 진행을 해보자 라는 생각에 작성하게 되었고, 혹시나 해당 방법을 구글링 하시는 분이 계실까 작성해봅니다.
class S3Uploads(APIView):
def post(self, request):
try:
photo = request.FILES.get("photo")
user = request.user # 현재 로그인한 사용자를 가져옵니다.
title = request.data.get("title")
description = request.data.get("description")
category_id = request.data.get("category") # 카테고리 id 갸져옴
try:
category = Category.objects.get(pk=category_id) # 카테고리를 찾기
except Category.DoesNotExist:
return Response({"ERROR": "Category not found"}, status=HTTP_400_BAD_REQUEST)
s3r = boto3.resource(
"s3",
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
)
key = f"{user}/{photo.name}"
s3r.Bucket(settings.AWS_STORAGE_BUCKET_NAME).put_object(
Key=key, Body=photo, ContentType="image/jpeg"
)
photo_url = f"{settings.AWS_S3_CUSTOM_DOMAIN}/{key}"
project = Project.objects.create(
title=title,
description=description,
user=user,
photo_url=photo_url,
category=category, # Category 모델의 인스턴스를 할당합니다.
)
# 처리 완료 후 응답
return Response({"MESSAGE": "SUCCESS"}, status=HTTP_200_OK)
except Exception as e:
return Response({"ERROR": str(e)}, status=HTTP_400_BAD_REQUEST)
원래 의도한 코드입니다. 그러나 이렇게 되면 postman에서 s3 업로드를 테스트 할 때 user=request.user라는 부분에서 걸리게 됩니다.
그래서 user를 명시하고 보내보도록 하겠습니다.
class S3Uploads(APIView):
def post(self, request):
try:
photo = request.FILES.get("photo")
### ↓ 여기부터 postman 테스트를 위한 코드
user_name = request.data.get("user") # 사용자 이름 또는 식별자를 가져옵니다.
try:
user = User.objects.get(username=user_name) # 사용자를 찾습니다.
except User.DoesNotExist:
return Response({"ERROR": "User not found"}, status=HTTP_400_BAD_REQUEST)
## ↑ 여기까지
title = request.data.get("title")
description = request.data.get("description")
category_id = request.data.get("category") # 카테고리 식별자를 가져옵니다.
try:
category = Category.objects.get(pk=category_id) # 카테고리를 찾습니다.
except Category.DoesNotExist:
return Response({"ERROR": "Category not found"}, status=HTTP_400_BAD_REQUEST)
s3r = boto3.resource(
"s3",
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
)
key = f"{user}/{photo.name}"
s3r.Bucket(settings.AWS_STORAGE_BUCKET_NAME).put_object(
Key=key, Body=photo, ContentType="image/jpeg"
)
photo_url = f"{settings.AWS_S3_CUSTOM_DOMAIN}/{key}"
project = Project.objects.create(
title=title,
description=description,
user=user,
photo_url=photo_url,
category=category, # Category 모델의 인스턴스를 할당합니다.
)
# 처리 완료 후 응답
return Response({"MESSAGE": "SUCCESS"}, status=HTTP_200_OK)
except Exception as e:
return Response({"ERROR": str(e)}, status=HTTP_400_BAD_REQUEST)
user_name = request.data.get("user") 를 작성한 뒤 해당 이름이 있는 유저가 있는지 찾습니다.
postman에는 이렇게 유저를 명시하여 넘깁니다.
테스트 이후에는 다시 원래 코드로 되돌려 저장해줍니다.
일단 이렇게 진행해보았습니다. 조금 공부해본 결과 테스트 데이터베이스와 토큰 인증을 활용한 방법도 있다는 것을 알게 되었습니다. 해당 부분은 앞으로 더 많이 공부하여 발전시켜보도록 하겠습니다.