Zunächst sieht es so aus, als würde man die Dateiregistrierung im Webdienst akzeptieren.
Dateiregistrierung ↓ Dateianzeige
Insbesondere hat Django eine Klasse namens ** File Field **, die sich dem Speichern von Dateien widmet. Weil es Klassen gibt, die als ** Upload-Formular ** und ** Modell ** bezeichnet werden. Ich denke, das ist ziemlich einfach.
Da es schwierig ist, auf der Upload-Seite zu schreiben, kann es in Ordnung sein, ein offizielles Dokument zu schreiben. (Datei hochladen) Grob gesagt sieht es so aus
Von Django unterstützte Klassen | Funktion |
---|---|
Dateifeld | Empfangen Sie Dateiinformationen von der Anforderung, zeichnen Sie die Binärdaten im Verzeichnis auf und zeichnen Sie die Dateiadresse in der Datenbank auf |
Formular hochladen | Legen Sie einen Wert im Feld des Modells fest (Entität in Java) |
Modell- | Es hat ein Modellfeld (Entität in Java). Das Django-Modell ist standardmäßig mit ORM-Funktionen ausgestattet, und DBs und Felder werden immer migriert und synchronisiert. Speichern Sie außerdem im Modell()Die Methode ist installiert. Auto-Persistenz-Einheit(´ ・ ω ・ `) |
Zunächst müssen Sie die Mediendatei festlegen Legt das Stammverzeichnis für Mediendateien fest.
Stellen Sie settings.py wie gewohnt ein.
setting.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #← Fügen Sie dies hinzu
MEDIA_URL = '/media/'
BASE_DIR ist zwei über settings.py, dh das Stammverzeichnis der App mit ** manage.py **. Es bedeutet das. Daher wird das Stammverzeichnis der Mediendatei auf das Medienverzeichnis ** im selben Verzeichnis wie ** manage.py festgelegt. Die URL für den Zugriff auf die Mediendatei ist auf ** / media / ** festgelegt.
Selbst wenn in diesem Zustand die Django-Seite in Ordnung ist, erhält die Nginx-Seite Zugriff Weil ich eine Fehlermeldung wie "Die Datei ist zu groß!" Erhalte.
Ich schicke dir eine große Bilddatei. Ich muss die Einstellung schreiben. Öffnen wir die Einstellungsdatei
% sudo vim /etc/nginx/conf.d/site.conf $Speicherort der Nginx-Einstellungen für Ubuntu. Versuchen Sie für CentOS-Sekte eine andere Datei
site.conf
server {
listen 80;
listen [::]:80;
server_name sample;
client_max_body_size 20M; #hinzufügen. Die maximale Größe der Anforderungsübertragung beträgt 20 MB
location /static {
alias /home/Benutzername, den Sie festgelegt haben/App root/static;
}
location /media { #hinzufügen. Legen Sie die Mediendatei und die URL fest
alias /home/Benutzername, den Sie festgelegt haben/App root/media;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
Stellen wir sicher, dass der Speicherort und der Medienstamm von Django auf denselben Speicherort wie diesen verweisen (^-^)
Damit sind die Servereinstellungen abgeschlossen!
Es ist ärgerlich, also werde ich es aufschlüsseln und erklären (´ ・ ω ・ `) Das Dateifeld wird verwendet, indem es wie folgt in das Modell integriert wird.
fileModel.py
from django.core.validators import FileExtensionValidator
from django.db import models
'''
Bildmodell
@author Nozawa
'''
class Picture(models.Model):
id = models.BigAutoField(primary_key=True,unique=True)
name = models.CharField(max_length=200)
image = models.FileField(upload_to='upload_pict/%Y/%m/%d/',
verbose_name='Hochgeladenes Bild',
validators=[FileExtensionValidator(['jpg','png','gif', ])],
) #upload_Wählen Sie das Speicherzielverzeichnis mit aus, um die Erweiterung mit Validatoren auszuwählen. Ausführlich_Legen Sie fest, wie auf dem Verwaltungsbildschirm der Name angezeigt werden soll
uploader = models.CharField(max_length=200)
uploadDate = models.DateField()
updateDate = models.DateField()
deleteFlg = models.BooleanField()
def __str__(self):
return '<Picture:id' + str(self.id) + ', ' + \
self.name + '(' + str(self.uploader) + ')>'
Das Upload-Formular wird so verwendet.
PictUploadForm.py
'''
Modellformular für das Hochladen von Bildern
'''
class PictUploadForm(forms.ModelForm):
class Meta:
model = Picture
fields = ['name', 'image']
pictureService.py
def createPicutre(self, request):
pict:PictUploadForm = PictUploadForm(request.POST, request.FILES, instance=pictObj)
pict.errors
if pict.is_valid():
#Überprüfen Sie, ob der Wert korrekt ist(Validierung)
pict.save()
#Wert in DB registrieren
Tatsächlich ist das Upload-Formular eine Funktion, bei der die ursprüngliche Art des Schreibens eines Datei-Uploads weggelassen wird. Das Upload-Formular erfolgt durch Eingabe der Modellinstanz und der Anforderung. ** Eine praktische Klasse, die automatisch Werte für das Modell festlegt **!
Ursprünglich ist es, wie das offizielle Dokument sagt, so geschrieben
sample.py
instance = ModelWithFileField(file_field=request.FILES['file']) #Der Feldname wird im Konstruktor angegeben und festgelegt.
instance.save()
Schließlich wird der Bildschirm auf der Upload-Seite angezeigt.
UploadView.py
class UploadView(TemplateView):
#Initialisierungsprozess
def __init__(self):
self.params = {
'form': PictUploadForm.PictUploadForm(),
}
#Bildform anzeigen
def get(self, request):
#Bildobjekt ersetzen
return render(request, 'memFrame/Bildschirm hochladen.html', self.params)
Bildschirm hochladen.html
<form action="{% url 'pictUpload' %}" method="post" enctype="multipart/form-data"> <!--Richten Sie Multipart ein und bereiten Sie den Datei-Upload vor-->
{% csrf_token %}
{{ form.name }}
{{ form.image }}
<tr>
<td>
<input type="submit" value="Bilder hochladen!"/>
</td>
</tr>
</form>
ViewingView.py
class ViewingView(TemplateView):
#Bilddienstklasse
pictService:PictService = PictService.PictService()
#Bildform anzeigen
def get(self, request):
#Bildobjekt ersetzen
pictList:list = self.pictService.findAll()
self.params = {
'picts':pictList,
}
print(pictList)
return render(request, 'myapplication/Anzeigebildschirm.html', self.params)
Anzeigebildschirm.html
{% for pict in picts %}
<h2>{{ pict.name }}</h2>
<img src='{{pict.image.url}}' width=200> #Geben Sie die URL des Dateifelds im Bild-Tag an
{% endfor %}
Ich konnte das hochgeladene Bild anzeigen ヾ (.> ﹏ <.) ノ ✧ *.