Carica un file in Django
- Imposta l’ambiente Django
- Configurazione del progetto Django
- Prova il server
-
Aggiorna il file
settings.py
- Crea un modello
- Crea un modulo per caricare file
- Aggiungi visualizzazioni
-
Configura il file
urls.py
- test
Questo articolo ti guiderà attraverso come caricare file in Django. Creeremo una semplice applicazione con un semplice modulo per compilare i dettagli e selezionare un file. Inoltre, visualizza tutti i file caricati in una tabella sottostante.
Prima di procedere, si consiglia di creare una nuova cartella o directory per questo progetto per mantenere le cose organizzate.
Imposta l’ambiente Django
Per questo tutorial, utilizzeremo un ambiente virtuale. Non è obbligatorio utilizzare un ambiente virtuale, ma è buona norma disporre di un ambiente virtuale unico per ogni progetto.
Per costruire un ambiente virtuale, abbiamo bisogno di un pacchetto Python, virtualenv
. Se non lo hai sul tuo computer, puoi scaricarlo usando il seguente comando.
pip install virtualenv
Ora che hai installato il pacchetto, creiamo l’ambiente.
Per creare un ambiente, eseguire il comando seguente.
virtualenv environment
“ambiente” è il nome dell’ambiente virtuale che abbiamo appena creato. Questo ambiente avrà la versione di Python installata globalmente sulla tua macchina e nessun pacchetto tranne quelli predefiniti.
Per attivare questo ambiente e utilizzarlo, eseguire il comando seguente.
environment\Scripts\activate
Ora, poiché stiamo imparando a conoscere Django, abbiamo bisogno che la libreria Django sia installata. Inoltre, poiché stiamo imparando a caricare i file, abbiamo bisogno di un pacchetto Python aggiuntivo per gestire le immagini. Il nome del pacchetto è Pillow
. Installiamo tutte le dipendenze.
pip install django
pip install Pillow
O,
pip3 install django
pip3 install Pillow
Nota che al momento della stesura di questo articolo, l’ultima versione di Django è 3.2
.
Configurazione del progetto Django
Per impostare un progetto Django, dobbiamo prima creare un progetto Django, creare un’applicazione, registrarla ed effettuare le migrazioni iniziali.
Per creare un progetto Django, esegui il comando seguente.
django-admin startproject DjangoFileUpload
Ora cambia la directory di lavoro in questo progetto usando il seguente comando.
cd DjangoFileUpload
Per creare un’applicazione all’interno del progetto Django, eseguire il seguente comando.
django-admin startapp Core
O,
python manage.py startapp Core
Core
è il nome dell’applicazione.
Per registrare questa applicazione, inserisci il nome dell’applicazione all’interno della lista INSTALLED_APPS
nel file settings.py
.
settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"Core", # Here
]
Django ha bisogno di alcuni modelli per funzionare correttamente. Ad esempio, il sistema di autenticazione o il superutente non funzioneranno senza la migrazione iniziale. Quindi, per effettuare le migrazioni iniziali, esegui il seguente comando.
python manage.py migrate
Produzione:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
Prova il server
Per eseguire il server, utilizzare il seguente comando. Se tutto è andato a buon fine, dovresti vedere il tuo server Django in esecuzione su http://127.0.0.1:8000/
.
python manage.py runserver
Aggiorna il file settings.py
I file caricati devono essere archiviati da qualche parte. In Django, per impostazione predefinita, tutti i file caricati sono archiviati in una cartella media
. Puoi sempre modificare il nome della cartella e l’URL ad essa associato, ma ci atterremo alla convenzione di denominazione predefinita.
Per definire l’URL dei file multimediali, MEDIA_URL
, e il percorso della cartella multimediale, MEDIA_ROOT
, aggiungere le seguenti istruzioni nel file settings.py
.
settings.py
import os
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
Non dimenticare di importare il modulo os
. Altrimenti, Python genererà un errore.
Crea un modello
Per archiviare i file caricati, dobbiamo creare un modello. Il campo in questo modello conterrà il percorso del file caricato ma non il file stesso.
Creeremo un modello Document
per memorizzare i dettagli sui file caricati.
Core\models.py
from django.db import models
class Document(models.Model):
title = models.CharField(max_length=200)
uploadedFile = models.FileField(upload_to="Uploaded Files/")
dateTimeOfUpload = models.DateTimeField(auto_now=True)
Il modello ha un campo title
di un tipo di carattere per memorizzare un titolo personalizzato per il file caricato e dateTimeOfUpload
memorizzerà la data e l’ora del caricamento del file. Il campo data-ora verrebbe impostato automaticamente quando viene creato l’oggetto modello.
Per archiviare i file, utilizziamo FileField()
. Questo tipo copre tutti i tipi di file. Ma se desideri essere un po’ specifico con le immagini, puoi utilizzare ImageField()
per memorizzare le immagini. Per tutti gli altri campi, devi attenerti a FileField()
.
Il parametro upload_to
viene utilizzato per definire la cartella, dove i file di questo modello verranno caricati all’interno della cartella media
.
Prima di utilizzare questo modello, dobbiamo effettuare migrazioni e migrarle. Per questo, esegui i due comandi seguenti.
python manage.py makemigrations
python manage.py migrate
Crea un modulo per caricare file
All’interno dell’applicazione o della cartella Core
, crea una nuova cartella, ovvero templates
. All’interno di questa cartella, crea un’altra cartella, ovvero Core
. Questo dovrebbe essere il nome della tua applicazione. Infine, crea un nuovo file all’interno di questa cartella, ovvero upload-file.html
.
Ora dovresti avere una struttura di file come questa.
DjangoFileUpload/
DjangoFileUpload/
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
db.sqlite3
gestire.py
Nucleo/
migrazioni/
modelli/
Nucleo/
upload-file.html
__init__.py
admin.py
app.py
modelli.py
test.py
views.py
All’interno di upload-file.html
, aggiungi il seguente codice HTML.
Core\templates\Core\upload-file.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Django File Upload</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');
* {
font-family: "Roboto";
}
body {
background-color: #F5F5F5;
}
form {
background-color: #FFFFFF;
padding: 25px;
}
table {
width: 100%;
text-align: center;
margin-top: 25px;
padding: 25px;
background-color: #FFFFFF;
}
table tr td {
padding-top: 15px;
}
</style>
</head>
<body>
<form action="{% url 'Core:uploadFile' %}" method="POST" enctype="multipart/form-data">
<input type="text" name="fileTitle" placeholder="Enter a title">
<input type="file" name="uploadedFile">
{% csrf_token %}
<input type="submit" value="Upload">
</form>
<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>File Path</th>
<th>Upload Date & Time</th>
</tr>
{% for file in files %}
<tr>
<td>{{ file.id }}</td>
<td>{{ file.title }}</td>
<td>{{ file.uploadedFile.url }}</td>
<td>{{ file.dateTimeOfUpload }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
All’interno della tabella, verranno visualizzati alcuni dettagli sui file caricati.
Aggiungi visualizzazioni
Per visualizzare il modello HTML e le informazioni su di esso e archiviare e gestire i caricamenti di file, creeremo una vista uploadFile()
.
Fare riferimento al codice seguente
Core\views.py
from . import models
from django.shortcuts import render
def uploadFile(request):
if request.method == "POST":
# Fetching the form data
fileTitle = request.POST["fileTitle"]
uploadedFile = request.FILES["uploadedFile"]
# Saving the information in the database
document = models.Document(title=fileTitle, uploadedFile=uploadedFile)
document.save()
documents = models.Document.objects.all()
return render(request, "Core/upload-file.html", context={"files": documents})
Questa vista rende il modello HTML che abbiamo appena creato nella sezione precedente. Il modulo nel modello HTML viene inviato allo stesso URL e gestito in questa vista. Se il metodo della richiesta è POST
, recuperiamo le informazioni inserite nel modulo e il file caricato, memorizziamo tali informazioni nel modello e salviamo il modello.
Altrimenti, nel caso generale, recuperiamo tutti i file che sono stati caricati e li inviamo in un dizionario contestuale da visualizzare sul modello HTML.
Configura il file urls.py
Infine, impostiamo gli URL. Prima di procedere, crea un nuovo file, ovvero urls.py
all’interno dell’applicazione o della cartella Core
. Questo file conterrà tutti gli URL associati a questa applicazione Django. È una buona pratica avere un file urls.py
separato per ogni applicazione Django.
All’interno di questo file, aggiungi il seguente codice.
from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
app_name = "Core"
urlpatterns = [
path("", views.uploadFile, name="uploadFile"),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Abbiamo aggiunto un pattern URL per il modello HTML upload-file.html
. Inoltre, abbiamo aggiunto un altro URL per i file multimediali. Useremo le variabili costanti che abbiamo dichiarato nel file settings.py
.
Poiché abbiamo creato un nuovo file urls.py
all’interno dell’applicazione Core
, dobbiamo collegare gli URL definiti qui con il progetto principale.
Per farlo, aggiungi la seguente istruzione all’interno della lista urlpatterns
in DjangoFileUpload\urls.py
path("", include("Core.urls")),
Il tuo file dovrebbe assomigliare a questo.
File: DjangoFileUpload\urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path("", include("Core.urls")),
]
test
Congratulazioni! Ora è il momento di testare il progetto. Segui i passaggi seguenti.
-
Avvia il server usando il comando -
python manage.py runserver
-
Vai all’URL
http://127.0.0.1:8000/
-
Compila il modulo con un titolo, seleziona un file e invia il modulo.
Ora dovresti vedere alcuni dettagli sul file nella tabella sotto il modulo.
Inoltre, se controlli la tua directory di lavoro, vedrai che è stata creata una cartella con il nome di media
e all’interno di questa cartella c’è un’altra cartella con il nome di Uploaded Files
. Questa cartella contiene tutti i file caricati.
Puoi caricare foto, video, programmi, PDF, file JSON, file HTML, ecc. Tieni presente che il tempo di caricamento dipende dalla dimensione del file, quindi abbi pazienza durante il caricamento.