[파이썬][Django] 미디어 파일 업로드 함수 사용 방법과 예제

Django에서 미디어 파일 (예: 이미지, 동영상, 파일 등)을 업로드하고 저장하는 함수를 사용하는 방법과 예제를 제공하겠습니다. 미디어 파일을 업로드하려면 몇 가지 설정과 코드 작성이 필요합니다.

  1. 미디어 파일 디렉토리 설정

    먼저, settings.py 파일에서 미디어 파일을 어디에 저장할 것인지 설정해야 합니다. MEDIA_URLMEDIA_ROOT 설정을 사용하여 미디어 파일의 URL 및 서버 경로를 정의합니다.

# settings.py
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
위의 설정은 `MEDIA_URL`로 시작하는 URL 경로를 사용하여 `MEDIA_ROOT` 디렉토리에서 미디어 파일을 저장하도록 합니다.
  1. URL 패턴 설정

    urls.py 파일에서 미디어 파일을 서빙하는 URL 패턴을 설정해야 합니다. 이렇게 하면 웹 브라우저에서 미디어 파일에 접근할 수 있습니다.

# urls.py
    
    from django.conf import settings
    from django.conf.urls.static import static
    from django.contrib import admin
    from django.urls import path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        # 다른 URL 패턴들
    ]
    
    # 개발 서버에서 미디어 파일 서빙
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
위의 코드에서 `static` 함수는 개발 서버에서만 사용하도록 `DEBUG` 설정을 확인하며 미디어 파일을 서빙합니다.
  1. 모델 필드 설정

    미디어 파일을 업로드하기 위해 모델에 FileField 또는 ImageField 필드를 추가합니다. 이 필드를 사용하여 파일을 업로드하고 저장합니다.

    예를 들어, myapp 앱에서 MyModel 모델을 만들어 이미지를 업로드하는 예제는 다음과 같습니다:

# myapp/models.py
    
    from django.db import models
    
    class MyModel(models.Model):
        title = models.CharField(max_length=100)
        image = models.ImageField(upload_to='images/')
위의 코드에서 `image` 필드는 이미지 파일을 저장하는 데 사용됩니다.
  1. 미디어 파일 업로드 예제

    미디어 파일을 업로드하려면 Django 폼을 사용해야 합니다. 폼은 파일 업로드를 처리하는 데 사용됩니다. 예를 들어:

# myapp/forms.py
    
    from django import forms
    from myapp.models import MyModel
    
    class MyModelForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ['title', 'image']
그리고 뷰 함수에서 폼을 처리합니다:
# myapp/views.py
    
    from django.shortcuts import render, redirect
    from .forms import MyModelForm
    
    def upload_image(request):
        if request.method == 'POST':
            form = MyModelForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return redirect('success')
        else:
            form = MyModelForm()
        return render(request, 'upload.html', {'form': form})
위의 코드에서 `MyModelForm`을 사용하여 이미지를 업로드하고 모델에 저장합니다.
  1. HTML 템플릿 예제

    HTML 템플릿에서 이미지를 업로드하는 폼을 사용하려면 다음과 같이 작성합니다:

<pre>
<code>

<!-- myapp/templates/upload.html -->
    
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Upload</button>
    </form>

</code>
</pre>
위의 코드에서 `enctype="multipart/form-data"`는 파일 업로드를 지원하도록 설정합니다.

이제 Django에서 미디어 파일을 업로드하고 저장하는 방법을 알게되었습니다. 이를 통해 이미지, 동영상, 파일 등의 미디어 파일을 웹 애플리케이션에 업로드하고 표시할 수 있습니다.