장고 다운로드 파일

Salman Mehmood 2023년10월10일
장고 다운로드 파일

이 문서에서는 관리자가 파일을 업로드하고 사용자가 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 파일에서 가져올 homedownload 기능의 경로를 정의해 보겠습니다.

다운로드 파일의 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 파일에서 homedownload 기능을 정의해야 합니다. 파일이 기본적으로 다운로드되는 다운로드 기능에서 경로를 얻습니다.

다음 줄에서 디렉토리가 존재하는지 여부를 확인합니다. 그런 다음 이진 모드 읽기에서 파일을 열고 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 파일을 업로드해 봅시다.

Django에서 MP3 파일 업로드

홈 페이지를 열고 다운로드할 수 있는지 확인해 봅시다.

Django에서 파일 다운로드

Salman Mehmood avatar Salman Mehmood avatar

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