2020-04-07 Erstellt: windows10 / Python-3.8.2-amd64 / Django-3.0.4
So laden Sie Dateien in der allgemeinen Klassenansicht in Django hoch Es gibt nicht viele japanische Informationen. Daher hat es lange gedauert. Ich werde einen Artikel schreiben, damit ich ihn nicht vergesse. Dieser Artikel richtet sich an Personen, die ein schnelles Verständnis der Prinzipien des Hochladens von Dateien wünschen.
Wenn Sie neu in Django sind, klicken Sie hier. Praktisches Tutorial zu Django in 10 Minuten
Der Projektname lautet mysite und der Anwendungsname lautet fileupload. Erstellen Sie ein Ordnermedium in mysite / und verwenden Sie es als Speicherort für Dateien.
Die Anordnung der Dateien ist bisher wie folgt.
mysite/
mysite/
__pycashe__/ <-macht dir keine Sorgen um
setting.py, urls.py etc.*.5 py
fileupload/
migrations/ <-macht dir keine Sorgen um
models.py, views.py etc.*.6 py
media/ <-Wo soll die hochgeladene Datei gespeichert werden?
manage.py <-Für das Projektmanagement
Registrieren Sie das Hochladen der Anwendungsdatei im Django-Projekt. Fügen Sie es daher zu INSTALLED_APPS in settings.py hinzu.
mysite/mysite/settings.py
INSTALLED_APPS = [
'fileupload.apps.FileuploadConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Registrieren Sie auch ein Verzeichnis zum Hochladen von Dateien. Fügen Sie dazu zwei Zeilen zu settings.py hinzu.
mysite/mysite/settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
Zu urls.py hinzugefügt, um URL zu registrieren.
mysite/mysite/urls.py
from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('fileupload/', include('fileupload.urls')),
path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Erstellen Sie ein Modell Fileupload. Es gibt zwei Felder, den Titel der Datei und die Datei selbst. Die Datei wird in einem Ordner mit dem Namen media / uploads / year / month / day gespeichert. Angenommen, Sie laden ein Foto hoch, ist die Erweiterung nur jpg.
mysite/fileupload/models.py
from django.db import models
from django.core.validators import FileExtensionValidator
class Fileupload(models.Model):
titlefield = models.CharField(max_length = 200, null = True)
filefield = models.FileField(
upload_to = 'uploads/%Y/%m/%d/',
verbose_name = 'attached file',
validators=[FileExtensionValidator(['jpg', ])],
null = True
)
Erstellen Sie eine Ansicht. Schließlich ist die Verwendung der generischen Klassenansicht von Django einfach. Die generische Klassenansicht enthält Standardvariablennamen, Dateinamen usw. Es kann nicht ohne Wissen verwendet werden (z. B. "fileupload_object_name" oder "template_name"). Deshalb habe ich ihm explizit einen beschreibenden Namen anstelle des Standardnamens gegeben.
mysite/fileupload/views.py
from django.views import generic
from .models import Fileupload
class FileuploadListView(generic.ListView):
model = Fileupload
context_object_name = 'fileupload_context_list'
class FileuploadCreateView(generic.CreateView):
model = Fileupload
fields = ['titlefield', 'filefield']
success_url = '/fileupload'
template_name = 'fileupload/fileupload_create.html'
class FileuploadDetailView(generic.DetailView):
model = Fileupload
template_name = 'fileupload/fileupload_detail.html'
context_object_name = 'fileupload_context'
class FileuploadUpdateView(generic.UpdateView):
model = Fileupload
fields = ['titlefield', 'filefield']
success_url = '/fileupload'
template_name = 'fileupload/fileupload_update.html'
class FileuploadDeleteView(generic.DeleteView):
model = Fileupload
success_url = '/fileupload'
template_name = 'fileupload/fileupload_delete.html'
Registrieren Sie die Ansicht in der URL. Erstellen Sie eine neue Datei fileupload / urls.py. Registrieren Sie die erstellte Ansicht.
mysite/fileupload/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.FileuploadListView.as_view()),
path('index', views.FileuploadListView.as_view(),
name = 'site_index'),
path('create', views.FileuploadCreateView.as_view(),
name = 'site_create'),
path('detail/<int:pk>', views.FileuploadDetailView.as_view(),
name = 'site_detail'),
path('update/<int:pk>', views.FileuploadUpdateView.as_view(),
name = 'site_update'),
path('delete/<int:pk>', views.FileuploadDeleteView.as_view(),
name = 'site_delete'),
]
Erstellen Sie eine HTML-Datei für die Vorlage in fileupload / templates / fileupload /
.
Entspricht jeder Ansicht.
mysite/fileupload/templates/fileupload/fileupload_list.html
<h1>Dateien auflisten</h1>
{% if fileupload_context_list %}
<table>
{% for temp in fileupload_context_list %}
<tr>
<td><a href = "{% url 'site_detail' temp.pk %}"> {{ temp.titlefield }}</a></td>
<td>{{ temp.filefield }}</td>
<td><a href = "{% url 'site_update' temp.pk %}">Edit</a></td>
<td><a href = "{% url 'site_delete' temp.pk %}">Delete</a></td>
</tr>
{% endfor %}
</table>
{% else %}
<p>No file available.</p>
{% endif %}
<p><a href = "{% url 'site_create' %}">Neue Datei hochladen</a></p>
mysite/fileupload/templates/fileupload/fileupload_create.html
<h1>Datei-Upload</h1>
<form method = "post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.titlefield }}
{{ form.filefield }}
<input type = "submit" value = "Create" />
</form>
mysite/fileupload/templates/fileupload/fileupload_detail.html
<h1>Dateidetails</h1>
{% if fileupload_context %}
<ul>
<li>Primary Key Number : {{ fileupload_context.pk }}</li>
<li>Memo Text : {{ fileupload_context.titlefield }}</li>
<li>Memo Text : /media/{{ fileupload_context.filefield }}</li>
<li>File : <img src = /media/{{ fileupload_context.filefield }} /></li>
</ul>
{% else %}
<p>No file available.</p>
{% endif %}
<p><a href = "{% url 'site_index' %}">Dateien auflisten</a></p>
mysite/fileupload/templates/fileupload/fileupload_update.html
<h1>Datei aktualisieren</h1>
<form method = "post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.titlefield }}
{{ form.filefield }}
<input type = "submit" value = "Save" />
</form>
mysite/fileupload/templates/fileupload/fileupload_delete.html
<h1>Datei löschen</h1>
<form method = "post">
{% csrf_token %}
<input type= "submit" value = "Delete" />
</form>
Nach Durchführung der Migration und Starten des Entwicklungs-WWW-Servers Es kann unter http: // localhost: 8000 / fileupload / abgerufen werden.
Der Vorgang, bei dem das Hochladen der Datei fehlschlägt, ist nicht ordnungsgemäß geschrieben, sodass es sich um eine zukünftige Aufgabe handelt.
Das Ende
Recommended Posts