장고 다운로드 파일
이 문서에서는 관리자가 파일을 업로드하고 사용자가 Django의 웹 페이지에서 파일을 다운로드할 수 있는 웹사이트를 만드는 방법을 보여줍니다.
Django에서 파일 업로드 및 다운로드
터미널로 이동하여 시연할 데모 프로젝트를 생성해 보겠습니다. 명령에 따라 Django 프로젝트를 만들고 해당 프로젝트에서 앱을 만듭니다.
django-admin startproject django_project
python manage.py startapp blog
사용 가능한 텍스트 편집기에서 이 새로 생성된 Django 프로젝트를 열겠습니다.
먼저 업로드된 파일을 위한 폴더를 생성할 것이므로 settings.py
를 엽니다. INSTALLED_APPS
목록을 찾아 앱 이름을 항목으로 전달합니다.
INSTALLED_APPS = [
"blog.apps.BlogConfig",
]
이제 파일을 업로드할 폴더를 만들어야 합니다. STATIC_URL
변수를 찾아 변수 아래에 다음 코드를 작성합니다.
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
이제 MEDIA_URL
을 '/media/'
로 설정한 다음 MEDIA_ROOT
(업로드된 파일이 저장될 폴더 이름)를 설정해야 합니다.
MEDIA_ROOT = os.path.join(BASE_DIR, "media_cdn")
이제 urls.py
에 미디어 및 정적 규칙을 추가하겠습니다. views.py
파일에서 가져올 home
및 download
기능의 경로를 정의해 보겠습니다.
다운로드 파일의 URL도 설정하겠습니다.
더 이상 사용되지 않기 때문에 url
개체를 사용할 수 없습니다. 따라서 이 대신 re_path
개체를 쉽게 사용할 수 있습니다.
re_path(r"^download/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT})
우리의 경우 이 코드를 사용하고 있습니다.
![Django에서 파일 업로드 및 다운로드](</img/Django/example1.png> 파일 업로드 및 다운로드
models.py
파일 내에 모델을 생성해 보겠습니다. 이 모델에는 두 개의 필드가 있습니다. 첫 번째 필드는 FileField
이고 두 번째 필드는 CharField
입니다.
또한 페이지 제목을 반환하는 문자열 dunder 메서드를 만들어야 합니다.
![Django 2에서 파일 업로드 및 다운로드](</img/Django/example2.png> 파일 업로드 및 다운로드
admin.py
파일에 FilesAdmin
모델을 등록해야 합니다.
from .models import FilesAdmin
admin.site.register(FilesAdmin)
블로그 폴더 내의 블로그 템플릿 내에 home.html
파일을 생성합니다. body 태그 중 home.html
파일에 다음 코드를 추가해 보겠습니다.
{% for post in file %}
<h2>{{post.title}}</h2>
<a href="{{post.adminupload.url}}" download="{{post.adminupload.url}}">Download</a>
{% endfor %}
home
기능의 FilesAdmin
모델에서 모든 개체를 가져옵니다. 그런 다음 home.html
파일에서 컨텍스트를 전달하고 이 페이지를 렌더링합니다.
views.py
파일에서 home
및 download
기능을 정의해야 합니다. 파일이 기본적으로 다운로드되는 다운로드
기능에서 경로를 얻습니다.
다음 줄에서 디렉토리가 존재하는지 여부를 확인합니다. 그런 다음 이진 모드 읽기에서 파일을 열고 HTTP 응답으로 반환합니다.
from django.http import HttpResponse, Http404
from django.conf import settings
import os
from django.shortcuts import render
from requests import Response
from .models import FilesAdmin
def home(request):
# get all objects
OUR_CONTEXT = {"file": FilesAdmin.objects.all()}
return render(request, "blog/home.html", OUR_CONTEXT)
def download(request, path):
# get the download path
download_path = os.path.join(settings.MEDIA_ROOT, path)
if os.path.exists(download_path):
with open(download_path, "rb") as fh:
response = HttpResponse(fh.read(), content_type="application/adminupload")
response["Content-Disposition"] = "inline; filename=" + os.path.basename(
download_path
)
return response
raise Http404
이제 이러한 명령을 실행하여 마이그레이션을 수행해야 합니다.
python manage.py makemigrations
python manage.py migrate
수퍼유저를 만듭니다.
python manage.py createsuperuser
Django 서버를 실행하고 관리자 패널에서 mp3 파일을 업로드해 봅시다.
홈 페이지를 열고 다운로드할 수 있는지 확인해 봅시다.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn