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
- Configuració de
settings.py
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')
- Configuració de
urls.py
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
- 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)
- 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',)
- 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})
- 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>
- 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
- Objectiu: Crear una funcionalitat per permetre als usuaris carregar una imatge de perfil.
- Passos:
- Crear un model
Profile
amb un campimage
. - 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.
- Crear un model
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
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.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment