Ich werde über das Hochladen von Dateien mit django (versino3.1 in diesem Artikel) zusammenfassen. Durch das Lesen dieses Artikels 1 Laden Sie Text hoch 2 Bild hochladen 3 Laden Sie Audio hoch Sie können herausfinden, wie es geht. Dieser Artikel richtet sich hauptsächlich an Django- und Programmieranfänger, es wird jedoch davon ausgegangen, dass die grundlegenden Inhalte des Gesamtbildes der Django-Architektur bekannt sind.
Auch in diesem Artikel 1 Starten Sie das Projekt mit dem folgenden Befehl im Verzeichnis post_file.
$ django-admin startproject post_file .
2 Erstellen Sie anschließend Vorlagen-, statische und Medienverzeichnisse und gehen Sie davon aus, dass die Verzeichnisstruktur wie folgt lautet.
$ project/(Projektverzeichnis)
.
│── config/(Verzeichnis einstellen)
│ │── __init__.py
│ │── settings.py
│ │── urls.py
│ │── wsgi.py
│── post_file_app/(Anwendungsverzeichnis)
│ │── __initi__.py
│ │── admin.py
│ │── apps.py
│ │── migrations
│ │ │── __init__.py
│ │── models.py
│ │── test.py
│ │── views.py
│── manage.py
│── template/
│── static/
│── media/
│ │──image/
│ │──audio/
In Bezug auf das Hochladen von Dateien 1 Hochladen vom Administratorbildschirm (vom Site-Administrator) 2 Hochladen vom Benutzerformular (vom Site-Benutzer) Es gibt zwei Möglichkeiten, daher werden wir sie im Folgenden klassifizieren.
project/config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'post_file_app',#Füge das hinzu
'media',#Füge das hinzu
]
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent#Füge das hinzu
MEDIA_ROOT = os.path.join(BASE_DIR,'media')#Füge das hinzu
MEDIA_URL = '/media/'#Füge das hinzu
In Django werden hochgeladene Bilder und Audiodateien nicht direkt in der Datenbank gespeichert, sondern in einer zuvor vorbereiteten Datei, und die Datei wird bei Bedarf von diesem Pfad abgerufen. Oben wird das zu speichernde Verzeichnis durch MEDIA_ROOT angegeben.
Darüber hinaus ist MEDIA_URL eine Einstellung, die beim Anzeigen einer Datei eine URL mit dem Namen / media /
project/post_file_app/model.py
class PostFile(models.Model):
usersname = models.CharField(max_length=50)#Text hochladen
image =models.ImageField(upload_to='images/',verbose_name='image',null=True,blank=True)#Bild hochladen
audio = models.FileField(default='', upload_to='audio/')#Audio-Upload
def __str__(self):
return self.usersname
Beachten Sie, dass CharField, ImageField und FileField je nach dem, was Sie hochladen, ordnungsgemäß verwendet werden. Vergessen Sie nicht, das Modell mit den folgenden beiden Befehlen zu migrieren.
$ python manage.py makemigrations
$ python manage.py migrate
Sie können nicht vom Administratorbildschirm hochladen, indem Sie einfach die PostFile-Klasse in model.py definieren. Durch Hinzufügen zu admin.py wie unten gezeigt können Sie vom Administratorbildschirm hochladen.
project/post_file_app/admin.py
from .models import PostFile
admin.site.register(PostFile)
In diesem Fall wird zusätzlich zum einfachen Hochladen vom Administratorbildschirm ein neuer erstellt 1 Erstellen Sie ein Eingabeformular (HTML-Datei erstellen, form.py erstellen) 2 Implementierung der Validierung der hochzuladenden Datei (beschreiben Sie die Logik in views.py) (Ich werde jedoch in diesem Artikel keine Validierung selbst schreiben, daher werde ich einen kleinen Code schreiben.)
Bereiten Sie zunächst eine HTML-Datei vor. Erstellen Sie eine post.html-Datei im Verzeichnis project / template / und schreiben Sie sie wie folgt.
project/template/post.html
<!doctype html>
<html lang="en">
<head>
</head>
<body >
<form method="POST" action='' enctype='multipart/form-data'>{% csrf_token %}
{{ form.username }}
{{ form.image }}
{{ form.audio }}
</body>
</html>
Zunächst muss encenctype = 'multipart / form-data' beim Hochladen eines Bildes oder einer Audiodatei im HTML-Formular-Tag beschrieben werden. Wenn dies nicht angegeben wird, kann django Bilder und Audiodateien später nicht mehr abrufen.
Außerdem ist {% csrf_token%} wie ein Zauber und wird beim Hochladen von Dateien benötigt.
Außerdem müssen Benutzername, Bild und Audio mit den Variablennamen (Benutzername, Bild, Audio) übereinstimmen, die bereits in project / post_file_app / model.py geschrieben wurden.
Erstellen Sie als Nächstes eine neue form.py in post_file_app und fügen Sie Folgendes hinzu, um ein Eingabeformular zu erstellen.
project/post_file_app/form.py
from django import forms
from .models import PostFile
class PostFileForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['username'].widget.attrs.update({'placeholder':'text'})
self.fields['image'].widget.attrs.update({'placehodler':'image upload'})
self.fields['audio'].widget.attrs.update({'placehodler':'audio upload'})
class Meta:
model = TestPost
fields = ('text','image','audio')
Um das zuletzt erstellte Formular anzuzeigen, erstellen Sie eine Ansicht in views.py und weisen Sie der Ansicht in urls.py eine URL zu.
project/post_file_app/views.py
from django.shortcuts import render,redirect
from django.views.generic import CreateView
from .forms import PostFileForm
class PostFileView(CreateView):
def post(self,request,*args,**kwargs):
form = PostFileForm(request.POST,request.FILES)
content_dict={
'form':form
}
if not form.is_valid():#Überprüfen Sie, ob die Datei korrekt eingegeben wurde (Validierung)
return render(request,'error.html')#error.HTML wird im Artikel nicht erstellt, aber bitte bereiten Sie es selbst vor.
form.save()
return redirect('success_page')
def get(self,request,*args,**kwargs):
form = PostFileForm(data=request.GET)
return render(request,'post.html',{'form':form,})
Hier gibt es eine Variable namens form, aber bitte ordnen Sie sie dem oben erwähnten form.username, form.image und form.audio von post.html zu. Außerdem gibt es request.POST und request.FILES als Argumente von PostFileForm (). Ersteres ist das, was Django benötigt, um den Text zu erhalten, und letzteres, um die Bild- und Audiodateien zu erhalten.
project/post_file_app/urls.py
from django.urls import path
from .views import Register,LoginView,LogoutView
from mystudio.views import RenderPostedSong
from .views import PostSongView,TestPostView,TestPostView,RenderTestPost
urlpatterns = [
path('post_file_view/',PostFileView.as_view(),name='post_file_view'),
path('success/',success,name='success_page',#Die Ansicht ist in diesem Artikel nicht definiert
path('error/',error,name='error_page',#Die Ansicht ist in diesem Artikel nicht definiert
]
das ist alles. Sie können jetzt Text, Bilder und Audiodateien mit django hochladen.
Recommended Posts