Django Rest Framework에서 Amazon S3 파일을 다운로드하는 API 생성
전제 조건
AWS 명령줄 인터페이스을 사용하여 위의 사용자로 로그인했습니다.
또한이 기사에서 다루는 언어 및 라이브러리 버전은 다음과 같습니다.
python-3.9.5
Django==3.2.4
djangorestframework==3.12.4
boto3==1.17.91
파일 준비
AWS 콘솔에서 S3으로 들어가 적절한 파일을 버킷에 배치합니다.
이번에는 test-qiita
버킷을 만들고 test.txt
라는 텍스트 파일을 업로드했습니다.
이 기사에서는 Django REST Framework를 사용하여이 test.txt를 다운로드하는 API를 만드는 것을 목표로합니다.
API 준비
먼저 최소한의 API를 엔드포인트를 준비해 둡시다.
작성하는 API는 /api/file
라는 URL에 GET
요청을 하는 사양으로 합니다.
먼저 file_download_test
라는 Django 프로젝트를 만들고,api
라는 django 응용 프로그램을 만듭니다.
$ django-admin startproject file_download_test
$ django-admin startapp api
그런 다음 api/views.py를 편집합니다.
api/views.pyfrom django.http import HttpResponse
from rest_framework.views import APIView
class FileView(APIView):
def get(self, request):
response = HttpResponse('ok')
return response
그리고 urls.py에서 URL과 FileView를 지원합니다.
file_download_test/urls.pyfrom django.contrib import admin
from django.urls import path
from api import views # 追加
urlpatterns = [
path('admin/', admin.site.urls),
path('api/file', views.FileView.as_view()), # 追加
]
이상입니다.
API를 사용해 봅시다.
$ python .\manage.py runserver
명령줄에서 실행하여 서버를 시작하고 브라우저에서 localhost:8000/api/file
에 액세스합니다.
이렇게 ok가 돌아오면 성공입니다.
S3에서 파일 가져오기
드디어 본제에 들어갑니다. 방금 만든 /api/file
API를 S3 파일을 반환하도록 수정합니다.
먼저 Python에서 AWS를 사용하는 데 자주 사용되는 라이브러리boto3를 설치합니다.
$ pip install boto3
boto3을 사용하기 위한 주의점
boto3을 사용하여 AWS에 연결하려면 자격 증명이 필요합니다. AWS 명령줄 인터페이스으로 로그인하면 ~/.aws/credentials
가 자동으로 만들어지고 그 내용은 다음과 같이 인증에 필요한 정보를 씁니다.
credentialsaws_access_key_id = ******************
aws_secret_access_key = ************************
boto3는 이 파일의 정보를 사용하여 AWS에 연결합니다.
※Docker 컨테이너의 경우 등~/.aws/credentials
이 보이지 않는 경우는, 환경 변수에 이하의 이름으로 값을 설정해 주세요.
먼저 최소한의 API를 엔드포인트를 준비해 둡시다.
작성하는 API는
/api/file
라는 URL에 GET
요청을 하는 사양으로 합니다.먼저
file_download_test
라는 Django 프로젝트를 만들고,api
라는 django 응용 프로그램을 만듭니다.$ django-admin startproject file_download_test
$ django-admin startapp api
그런 다음 api/views.py를 편집합니다.
api/views.py
from django.http import HttpResponse
from rest_framework.views import APIView
class FileView(APIView):
def get(self, request):
response = HttpResponse('ok')
return response
그리고 urls.py에서 URL과 FileView를 지원합니다.
file_download_test/urls.py
from django.contrib import admin
from django.urls import path
from api import views # 追加
urlpatterns = [
path('admin/', admin.site.urls),
path('api/file', views.FileView.as_view()), # 追加
]
이상입니다.
API를 사용해 봅시다.
$ python .\manage.py runserver
명령줄에서 실행하여 서버를 시작하고 브라우저에서
localhost:8000/api/file
에 액세스합니다.이렇게 ok가 돌아오면 성공입니다.
S3에서 파일 가져오기
드디어 본제에 들어갑니다. 방금 만든 /api/file
API를 S3 파일을 반환하도록 수정합니다.
먼저 Python에서 AWS를 사용하는 데 자주 사용되는 라이브러리boto3를 설치합니다.
$ pip install boto3
boto3을 사용하기 위한 주의점
boto3을 사용하여 AWS에 연결하려면 자격 증명이 필요합니다. AWS 명령줄 인터페이스으로 로그인하면 ~/.aws/credentials
가 자동으로 만들어지고 그 내용은 다음과 같이 인증에 필요한 정보를 씁니다.
credentialsaws_access_key_id = ******************
aws_secret_access_key = ************************
boto3는 이 파일의 정보를 사용하여 AWS에 연결합니다.
※Docker 컨테이너의 경우 등~/.aws/credentials
이 보이지 않는 경우는, 환경 변수에 이하의 이름으로 값을 설정해 주세요.
$ pip install boto3
aws_access_key_id = ******************
aws_secret_access_key = ************************
API 수정
그런 다음 views.py를 다음과 같이 수정합니다.
api/views.py
import boto3
from django.http import HttpResponse
from rest_framework.views import APIView
class FileView(APIView):
def get(self, request):
s3 = boto3.resource('s3')
BUCKET_NAME = 'test-qiita'
FILE_NAME = 'test.txt'
object = s3.Object(BUCKET_NAME, FILE_NAME).get()
response = HttpResponse(object['Body'].iter_chunks(), content_type=object['ContentType'])
response['Content-Disposition'] = f'attachment; filename="{FILE_NAME}"'
return response
다시 브라우저에서
localhost:8000/api/file
에 액세스하십시오.무사히 파일을 다운로드할 수 있었습니다!
이번에 만든 파일은 여기에서 확인할 수 있습니다.
Reference
이 문제에 관하여(Django Rest Framework에서 Amazon S3 파일을 다운로드하는 API 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saikoro2007/items/6f69f873e47623bf28f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)