Python 웹 전투에서 Django의 파일 업로드 및 처리에 대한 자세한 설명

     

 


개요

키워드: Python 웹 개발, Django, 파일 업로드, 파일 처리

지금 Django의 파일 업로드 및 처리를 공유하세요.

1. 파일 업로드의 기본 원칙

Django의 파일 업로드 및 처리에 대해 자세히 설명하기 전에 파일 업로드의 기본 원리를 이해해 봅시다. 사용자가 업로드할 파일을 선택하면 파일이 서버로 전송되고 서버의 특정 위치에 저장됩니다. 업로드된 파일을 데이터베이스에 저장하고, 썸네일을 생성하고, 파일 형식을 확인하는 등 서버 측에서 처리해야 합니다.

1.1 Django의 파일 업로드 프로세스 소개

Django에서 파일 업로드 프로세스는 다음 단계로 간단하게 요약할 수 있습니다.

  1. 사용자는 웹 페이지에 업로드할 파일을 선택하고 업로드 버튼을 클릭합니다.

  2. 프런트엔드는 파일을 백엔드 서버로 보냅니다.

  3. Django 백엔드는 파일을 수신하고 지정된 위치에 저장합니다.

  4. 데이터베이스에 저장, 썸네일 생성 등과 같은 요구 사항에 따라 파일을 처리합니다.

  5. 업로드 결과를 사용자에게 반환합니다.

2. Django 파일 업로드 구현 단계

2.1 파일 업로드 구성 설정

먼저 파일에서 두 개의 구성 항목을 찾습니다 settings.py. 파일 업로드 후 저장 경로를 지정하며, 웹 페이지에서 파일의 접근 경로입니다.MEDIA_ROOTMEDIA_URLMEDIA_ROOTMEDIA_URL

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

2.2 파일 업로드 양식 작성

그런 다음 프런트 엔드에 파일 업로드 양식을 작성합니다. Django에서는 forms모듈을 사용하여 쉽게 양식을 만들 수 있습니다.

파일 업로드 양식의 예:

from django import forms

class UploadFileForm(forms.Form):
    file = forms.FileField()

2.3 파일 업로드 요청 처리

사용자가 파일 업로드 양식을 제출한 후 백엔드에서 파일 업로드 요청을 처리해야 합니다. Django에서는 뷰 기능을 사용하여 요청을 처리할 수 있습니다.

파일 업로드를 처리하는 보기 기능의 예:

from django.shortcuts import render
from .forms import UploadFileForm

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = form.cleaned_data['file']
            # 在这里对文件进行处理,如保存到指定位置、生成缩略图等
            # ...
            return render(request, 'upload_success.html')
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form})

2.4 업로드된 파일 처리

보기 기능에서 request.FILES업로드된 파일 개체를 가져올 수 있습니다. 다음으로 지정된 위치에 저장, 썸네일 생성 등과 같은 필요에 따라 파일을 처리할 수 있습니다.

간단한 파일 저장 예:

import os
from django.conf import settings
from django.shortcuts import render
from .forms import UploadFileForm

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = form.cleaned_data['file']
            # 将文件保存到指定位置
            with open(os.path.join(settings.MEDIA_ROOT, file.name), 'wb') as destination:
                for chunk in file.chunks():
                    destination.write(chunk)
            return render(request, 'upload_success.html')
    else:
        form = UploadFileForm()
        return render(request, 'upload.html', {'form': form})

2.5 파일 업로드 성공 페이지

마지막으로 파일 업로드가 성공한 후 페이지에 대한 템플릿을 만들어야 합니다. 이 템플릿에서 성공적인 업로드 메시지를 표시하거나 다른 작업 옵션을 제공할 수 있습니다.

간단한 파일 업로드 성공 페이지의 예:

<!-- upload_success.html -->
<!DOCTYPE html>
<html>
<head>
    <title>文件上传成功</title>
</head>
<body>
    <h1>文件上传成功!</h1>
    <!-- 在这里添加其他内容或操作选项 -->
</body>
</html>

2.6 Alibaba Cloud OSS 파일 업로드

로컬 파일 시스템 외에도 Alibaba Cloud의 OSS(개체 스토리지 서비스)와 같은 클라우드 스토리지 서비스에 업로드된 파일을 저장할 수도 있습니다. Django에서 Alibaba Cloud OSS를 사용하여 파일을 업로드하는 것은 매우 간단합니다.

2.6.1 Alibaba Cloud Python SDK 설치

먼저 Alibaba Cloud의 다양한 서비스와 상호 작용할 수 있는 기능을 제공하는 Alibaba Cloud Python SDK를 설치해야 합니다. 터미널에서 다음 명령을 실행하여 설치합니다.

pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-oss2

2.6.2 Alibaba Cloud OSS 구성

Alibaba Cloud OSS를 사용하기 전에 먼저 구성해야 합니다. settings.py파일에 다음 구성 항목을 추가합니다 .

ALIYUN_ACCESS_KEY_ID = 'your_access_key_id'
ALIYUN_ACCESS_KEY_SECRET = 'your_access_key_secret'
ALIYUN_OSS_ENDPOINT = 'your_oss_endpoint'
ALIYUN_OSS_BUCKET_NAME = 'your_bucket_name'

your_access_key_id여기에서 및 your_access_key_secret을 Alibaba Cloud 액세스 키 ID 및 액세스 키 암호로 교체 해야 합니다 . your_oss_endpointOSS 서비스의 액세스 도메인 이름 your_bucket_name이며 생성한 스토리지 버킷의 이름입니다.

2.6.3 Aliyun OSS 파일 업로드 기능 쓰기

다음으로 Alibaba Cloud OSS에 파일을 업로드하는 기능을 구현하는 기능을 작성합니다.

예:

import oss2
from django.conf import settings

def upload_to_oss(file):
    auth = oss2.Auth(settings.ALIYUN_ACCESS_KEY_ID, settings.ALIYUN_ACCESS_KEY_SECRET)
    bucket = oss2.Bucket(auth, settings.ALIYUN_OSS_ENDPOINT, settings.ALIYUN_OSS_BUCKET_NAME)

    # 生成一个随机的文件名
    filename = oss2.utils.to_string(os.urandom(8)).encode('hex') + os.path.splitext(file.name)[1]

    # 上传文件到阿里云OSS
    bucket.put_object(filename, file)

    # 返回文件在OSS中的访问URL
    return f'https://{settings.ALIYUN_OSS_BUCKET_NAME}.{settings.ALIYUN_OSS_ENDPOINT}/{filename}'

이 기능에서는 먼저 Access Key ID와 Access Key Secret을 사용하여 Auth객체를 생성하고 OSS 서비스의 액세스 도메인 이름과 버킷 이름을 지정합니다. 그런 다음 임의의 파일 이름을 생성하고 bucket.put_object파일을 OSS에 업로드하는 메서드를 호출합니다.

마지막으로 OSS에서 반환된 파일의 액세스 URL을 가져와서 나중에 사용할 수 있도록 데이터베이스에 저장합니다.

2.6.4 Alibaba Cloud OSS 파일 업로드 기능 호출

보기 기능에서 위에서 작성한 Alibaba Cloud OSS 파일 업로드 기능을 호출하여 Alibaba Cloud OSS에 파일을 업로드할 수 있습니다.

예:

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            file = form.cleaned_data['file']

            # 将文件上传到阿里云OSS
            oss_url = upload_to_oss(file)

            # 在这里可以对上传成功的文件进行其他操作
            # ...

            return render(request, 'upload_success.html', {'oss_url': oss_url})
    else:
       form = UploadFileForm()
        return render(request, 'upload.html', {'form': form})

3. 기술 요약

이 기사에서는 Django 프레임워크에서 파일 업로드 및 처리의 기본 원칙 및 구현 방법과 Alibaba Cloud oss의 도킹 방법을 소개합니다.

Django는 파일을 쉽고 안전하게 업로드할 수 있는 몇 가지 기본 제공 기능과 도구를 제공합니다. 업로드된 파일을 확인하고, 파일 저장 경로를 처리하고, 파일 크기 및 유형을 제한하고, 파일 작업과 관련된 기타 작업을 수행할 수 있는 파일 업로드 처리를 위한 고급 API를 제공합니다.

Alibaba Cloud OSS를 사용하면 클라우드에 파일을 편리하게 저장할 수 있고 고가용성 및 안정성을 제공할 수 있습니다. 이 통합은 Django 프로젝트에서 유연한 파일 업로드 기능을 구현하는 데 도움이 될 수 있습니다.

글이 도움이 되셨다면 좋아요, 수집, 전달 부탁드립니다 감사합니다! !

추천

출처blog.csdn.net/Rocky006/article/details/132141655