En aquest tema, aprendrem com gestionar la càrrega de fitxers en una aplicació Django. La càrrega de fitxers és una funcionalitat comuna en moltes aplicacions web, com ara la càrrega d'imatges de perfil, documents, etc. Django proporciona eines senzilles i eficients per gestionar aquest procés.

Objectius

  • Comprendre com configurar Django per permetre la càrrega de fitxers.
  • Aprendre a crear formularis per carregar fitxers.
  • Gestionar la visualització i l'emmagatzematge de fitxers carregats.

Configuració Inicial

  1. Configuració de settings.py

Primer, hem de configurar el nostre fitxer settings.py per especificar on es guardaran els fitxers carregats.

# settings.py

import os

# Directori on es guardaran els fitxers carregats
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

  1. Configuració de urls.py

A continuació, hem d'assegurar-nos que Django serveixi els fitxers carregats durant el desenvolupament. Afegirem una configuració a urls.py per gestionar això.

# project/urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Creació del Formulari de Càrrega de Fitxers

  1. Definició del Model

Crearem un model per emmagatzemar informació sobre els fitxers carregats.

# app/models.py

from django.db import models

class Document(models.Model):
    title = models.CharField(max_length=100)
    uploaded_file = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

  1. Creació del Formulari

Crearem un formulari per permetre als usuaris carregar fitxers.

# app/forms.py

from django import forms
from .models import Document

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ('title', 'uploaded_file',)

  1. Creació de la Vista

Crearem una vista per gestionar la càrrega de fitxers.

# app/views.py

from django.shortcuts import render, redirect
from .forms import DocumentForm

def upload_file(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('file_upload_success')
    else:
        form = DocumentForm()
    return render(request, 'upload.html', {'form': form})

  1. Creació de la Plantilla

Crearem una plantilla per mostrar el formulari de càrrega de fitxers.

<!-- templates/upload.html -->

<!DOCTYPE html>
<html>
<head>
    <title>Carrega de Fitxers</title>
</head>
<body>
    <h1>Carrega de Fitxers</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Carregar</button>
    </form>
</body>
</html>

  1. Configuració de les URL

Finalment, configurarem les URL per accedir a la vista de càrrega de fitxers.

# app/urls.py

from django.urls import path
from .views import upload_file

urlpatterns = [
    path('upload/', upload_file, name='file_upload'),
]

Exercici Pràctic

Exercici 1: Carrega d'Imatges de Perfil

  1. Objectiu: Crear una funcionalitat per permetre als usuaris carregar una imatge de perfil.
  2. Passos:
    • Crear un model Profile amb un camp image.
    • Crear un formulari per carregar la imatge de perfil.
    • Crear una vista per gestionar la càrrega de la imatge.
    • Crear una plantilla per mostrar el formulari de càrrega de la imatge.

Solució

Model

# app/models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='profile_images/')

Formulari

# app/forms.py

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('image',)

Vista

# app/views.py

def upload_profile_image(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('profile_upload_success')
    else:
        form = ProfileForm()
    return render(request, 'upload_profile.html', {'form': form})

Plantilla

<!-- templates/upload_profile.html -->

<!DOCTYPE html>
<html>
<head>
    <title>Carrega d'Imatge de Perfil</title>
</head>
<body>
    <h1>Carrega d'Imatge de Perfil</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Carregar</button>
    </form>
</body>
</html>

URL

# app/urls.py

urlpatterns = [
    path('upload_profile/', upload_profile_image, name='profile_upload'),
]

Conclusió

En aquesta secció, hem après com gestionar la càrrega de fitxers en una aplicació Django. Hem configurat el nostre projecte per permetre la càrrega de fitxers, hem creat models, formularis, vistes i plantilles per gestionar aquest procés. A més, hem practicat amb un exercici per carregar imatges de perfil. Amb aquests coneixements, estàs preparat per implementar funcionalitats de càrrega de fitxers en les teves pròpies aplicacions Django.

© Copyright 2024. Tots els drets reservats