일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- python
- 바로학교
- 장고
- venv
- MongoDB
- 유튜브
- Google Drive
- nocookie
- pymongo
- 알고리즘
- Django
- flask
- G-Suite
- DB
- 구글 드라이브
- gpu 병렬처리
- 깃허브
- selenium
- 리스트
- 추천 영상
- 그리디 알고리즘
- 충북
- 아이폰
- 코딩
- List
- 단축어
- docker-compose
- 탐욕 알고리즘
- 링크
Archives
- Today
- Total
SSAMKO의 개발 이야기
[django] DB연동없이 파일 업로드 받아 처리하는 API 본문
반응형
대용량 파일을 local DB가 아닌 GCS나 AWS S3에 저장하기 위해,
혹은 mongodb같은 써드파티 DB를 사용하는 서버에서,
파일을 단순히 업로드 받아 처리해야할 경우가 있다.
그럴경우엔 forms.py나 model.py 작성없이 바로 views.py에서 작성 가능하다.
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from .. import FileManager as fm
@csrf_exempt
@require_POST
def recommend_user_prod(request):
fm.handle_uploaded_file(request.FILES['file'])
response = HttpResponse("ok")
response.status_code = 200
return response
POST 방식만을 사용할 것이기에 @require_POST 데코레이터를 사용하고,
외부에서 접근 가능하도록 @csrf_exempt 역시 적용했다.
업로드 받은 파일을 처리하기 위한 코드를 아래와 같이 별도로 작성했다. (FileManager.py)
import os
def handle_user_recProds_file(file, test=False):
"""Handle the received file below"""
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
save_path = os.path.join(BASE_DIR, file.name)
with open(save_path, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
request.FILES를 통해 POST로 넘어온 file에 접근할 수 있다.
API테스트를 위해 아래와 같이 test code를 작성할 수 있다.
import os
from django.urls import reverse
from django.test import TestCase
class AircodeAPITests(TestCase):
def test_upload(self):
url = reverse("upload")
with open('your/file/path/') as f:
response = self.client.post(url, {'file':f}, format='multipart')
self.assertEquals(response.status_code, 200)
self.assertContains(response, 'ok')
반응형
'Django' 카테고리의 다른 글
[django] api 속도(응답시간) 테스트 코드 (0) | 2021.01.24 |
---|---|
[django] 데코레이터로 API에 토큰(token) 적용하기 (0) | 2021.01.20 |
[Django] Test 코드 작성시 header 추가하기 (1) | 2021.01.15 |
[Django] TestCase 이용해서 테스트 코드 짜기 (0) | 2021.01.14 |
[GCP] django 개발서버 배포하기 (0) | 2021.01.13 |
Comments