웹사이트는 일반적으로 자바스크립트, CSS, 이미지 등의 파일들을 사용하는데, 이러한 파일들을 Django에서는 Static 파일이라 부른다. 이러한 Static 파일들을 체계적으로 관리하기 위하여 Django에서는 프로젝트 홈 디렉터리 (settings.py에서의 BASE_DIR) 밑에 “static”이라는 서브 폴더를 만들어 그곳에 static 파일들을 넣는다. 이번 프로젝트에서는 프런트 앤드 개발자들이 있기 때문에 프레임 워크의 Model, View만을 사용하지만 static 파일은 template에서 파일을 불러오기 위한 저장소 용도로 사용하는 것이 보편적이다.
class ReviewView(View):
@login
def post(self, request, item_id):
try:
content = request.POST.get("content", None)
grade = request.POST.get("grade", None)
image = request.FILES.get('image', None)
if not Item.objects.filter(id=item_id).exists():
return JsonResponse({"MESSAGE":"NO_ITEM"}, status=400)
Review.objects.create(
member_id = request.user.id,
item_id = item_id,
image_url = image,
content = content,
grade = grade
)
return JsonResponse({'MESSAGE': "SUCCESS"}, status=201)
except KeyError:
return JsonResponse({"MESSAGE": "KEY_ERROR"}, status=400)
class DetailPageView(View):
def get(self, request, item_id):
grade = request.GET.get("grade", None)
if not Item.objects.filter(id=item_id).exists():
return JsonResponse({"MESSAGE":"NO_MENU"}, status=400)
item = Item.objects.get(id=item_id)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
IP = s.getsockname()[0]
result = {
"name" : item.name,
"price" : float(item.price),
"discount" : float(item.discount),
"discount_price" : float(item.price-item.discount),
"stock" : item.stock,
"image" : [image.image_url for image in item.image_set.all()],
"review" : [
{
"name" : review.member.name,
"image" : "http://"+IP+":8000/media/"+review.image_url.name,
"review_id" : review.id,
"content" : review.content,
"grade" : review.grade,
"create_at" : review.create_at
}
for review in Review.objects.filter(item_id=item_id).order_by("-grade" if grade else "-create_at")]
}
return JsonResponse({'RESULT':result}, status=200)
필자는 프로젝트를 진행하면서 구매자가 제품의 리뷰를 작성할 때 구매자에게 이미지 파일을 form file로 받아 지정된 static 폴더에 저장하고 데이터 베이스의 column에 사진의 경로를 저장하여 제품 상세 페이지를 불러올 때 등록된 리뷰를 보여주는 기능에 django의 static을 사용하였다.