[PYTHON] Datei-Upload mit Django

0.0 Hauptinhalt

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/ 

1.0 Hauptablauf bis zum Hochladen der Datei

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.

1.1 Hochladen vom Administratorbildschirm (vom Site-Administrator)

1.1.1 Fügen Sie die Einstellungen zu settings.py hinzu.

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 / zuweist.

1.1.2 Definieren Sie das Layout der Daten, die in model.py hochgeladen werden sollen

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  

1.1.3 Fügen Sie admin.py Einstellungen hinzu, damit diese vom Administratorbildschirm hochgeladen werden können

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)

1.2 Hochladen vom Benutzerformular (vom Site-Benutzer)

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.)

1.2.1 Eingabeformular erstellen

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 Ende

das ist alles. Sie können jetzt Text, Bilder und Audiodateien mit django hochladen.

Recommended Posts

Datei-Upload mit Django
Datei-Upload mit Flask + jQuery
Erstellen Sie mit Django einen Datei-Uploader
Internationalisierung mit Django
CRUD mit Django
Django 1.11 wurde mit Python3.6 gestartet
Organisieren Sie Django-Vorlagendateien
Entwicklungsverdauung mit Django
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Dateivorgang mit open - "../"
Verwenden Sie Gentelella mit Django
Twitter OAuth mit Django
Erste Schritte mit Django 1
Mail mit Django senden
Verwenden Sie WENIGER mit Django
Pooling mechanisieren mit Django
Verwenden Sie MySQL mit Django
Django ab heute
Erste Schritte mit Django 2
[Django] Implementieren Sie eine Funktion zum Hochladen von Bilddateien, die kein Modell verwendet
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Minimale Konfigurations-Website-Umgebung mit Django
Erstellen Sie eine API mit Django
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Stellen Sie Django serverlos mit Lambda bereit
Python3 + Django ~ Mac ~ mit Apache
Zeichnen Sie eine netCDF-Datei mit Python
Erstellen Sie eine Homepage mit Django
Laden Sie eine Datei in Dropbox hoch
Schnelle Dateiübertragung mit Stoff
Hochladen und Anpassen von Bildern mit django-ckeditor
Fangen Sie mit Django an! ~ Tutorial ④ ~
Erste Schritte mit Python Django (4)
Erstellen Sie eine Webanwendung mit Django
Erste Schritte mit Python Django (3)
Kombinieren Sie Fast API mit Django ORM
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Bidirektionale Dateiübertragung in Pythonista 3
Verwenden Sie Django, um Tweet-Daten zu speichern
Führen Sie eine AES-Verschlüsselung mit DJango durch
Einführung in Python Django (6)
Kombiniere zwei Bilder mit Django
Erste Schritte mit Django mit PyCharm
Echtzeit-Web mit Django-Kanälen
Doppelte Submit-Unterdrückung mit Django
Django REST Framework mit Vue.js
Laden Sie die CSV-Datei mit Python herunter
Verwenden Sie prefetch_related bequem mit Django
Erstellen Sie eine Xlsx-Datei mit XlsxWriter
Erste Schritte mit Python Django (5)
Melden Sie sich mit dem Django Rest Framework an
Qiita API Oauth mit Django
Testgetriebene Entwicklung mit Django Teil 3
Laden Sie die Django-Shell mit ipython neu
Laden wir S3-Dateien mit CLI hoch
Schritte zur Entwicklung von Django mit VSCode
Extrahieren Sie die xz-Datei mit Python
Testgetriebene Entwicklung mit Django Teil 4
Laden Sie ein Django-Modul mit einem Interpreter