Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren

Sie können den Upload auch dann testen, wenn Sie die Bilddatei lokal ablegen, um sie jedoch im Testcode zu vervollständigen.

Beispiel-App erstellen

(python2.7, django1.6)

$ django-admin.py startproject core
$ mv core photo_book
$ cd photo_book
$ python manage.py startapp photos
$ mkdir -p static/upload  #Verzeichnis zum Speichern von Bildern

core/

settings.py


#Nur zusätzliche Teile
IINSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'photos',  #hinzufügen
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/')  #hinzufügen

urls.py


from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

from photos.views import ImageCreateView

urlpatterns = patterns(
    '',
    url(r'^images/$', ImageCreateView.as_view(), name='images'),
    url(r'^admin/', include(admin.site.urls)),
)

photos/

Modell-

models.py


from django.db import models


class Photo(models.Model):
    image = models.ImageField(upload_to='upload')

Bilden

forms.py


from django import forms


class PhotoForm(forms.Form):
    image = forms.ImageField()

Aussicht

views.py


from django.views.generic.edit import CreateView

from photos.models import Photo


class ImageCreateView(CreateView):
    model = Photo
    success_url = '/'

Prüfung

test.py


from StringIO import StringIO

from django.core.urlresolvers import reverse
from django.test import TestCase
from photos.models import Photo


class CreateImageTest(TestCase):
    def test_post(self):
        url = reverse("images")

        dummy_image = StringIO(
            'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00'
            '\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;'
        )
        dummy_image.name = 'dummy_image.gif'
        dummy_image.content_type = 'image/gif'
        response = self.client.post(url, {'image': dummy_image})

        self.assertEqual(response.status_code, 302)
        #Überprüfen Sie, ob es in db gespeichert wurde
        self.assertEqual(Photo.objects.count(), 1)
        #Überprüfen Sie, ob das gespeicherte Bild und das hochgeladene Dummy-Bild identisch sind
        uploaded_image = StringIO(open(Photo.objects.last().image._get_path(), 'rb').read())
        self.assertEqual(uploaded_image.getvalue(), dummy_image.getvalue())

Testlauf

$ python manage.py test
Creating test database for alias 'default'...
.
----------------------------------------------------------------------
Ran 1 test in 0.042s

OK
Destroying test database for alias 'default'...

Referenz

Recommended Posts

Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren
Erstellen Sie ein Django-Projekt und eine Django-Anwendung in einer virtuellen Python-Umgebung und starten Sie den Server
Erstellen Sie eine Binärdatei in Python
Erstellen Sie einen lokalen Bereich in Python, ohne den Namespace zu verschmutzen
Erstellen Sie mit Python + PIL ein Dummy-Image.
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Analysieren Sie die Researchmap-API mit Python und erstellen Sie automatisch eine Word-Datei für die Leistungsliste
[GPS] Erstellen Sie eine kml-Datei mit Python
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Erstellen Sie eine GIF-Datei mit Pillow in Python
So erstellen Sie eine JSON-Datei in Python
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
[Django] Implementieren Sie eine Funktion zum Hochladen von Bilddateien, die kein Modell verwendet
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
[GCF + Python] So laden Sie Excel in GCS hoch und erstellen eine neue Tabelle in BigQuery
[Django] Test zum Senden einer Datei per POST und Überprüfen des zurückgegebenen Kontexts [TDD]
Erstellen Sie eine Dummy-Datendatei
Speichern Sie das Pystan-Modell und erhalten Sie eine Pickle-Datei
[Python] Ändern Sie den Namen der Bilddatei in eine Seriennummer
Ändern Sie das Standardausgabeziel in eine Datei in Python
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Erstellen Sie eine Dox-Datei mit Miniaturansichten der Fotos im Ordner mit der Python-Python-Docx-Bibliothek und der kostenlosen Software "Nur Reduzierung".
Speichern Sie die Binärdatei in Python
Erstellen Sie einen DI-Container mit Python
Erstellen Sie Google Mail in Python ohne Verwendung der API
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen Sie mit Django einen Datei-Uploader
Erstellen und lesen Sie Messagepacks in Python
Erstellen Sie mit Django einen LINE-Bot
Erstellen Sie eine temporäre Datei mit Django als Zip und geben Sie sie zurück
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Erstellen Sie ein Shell-Skript, um die Python-Datei mehrmals auszuführen
Geben Sie einen Python-Ordner an oder erstellen Sie ihn, und speichern Sie den Screenshot.
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Durchsuchen Sie das Verzeichnis und erstellen Sie eine Liste mit Verzeichnispfaden und Dateinamen
Rufen Sie die Formel in der Excel-Datei als Zeichenfolge in Python ab
Ersetzen Sie den Verzeichnisnamen und den Dateinamen im Verzeichnis zusammen mit einem Linux-Befehl.
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Richten Sie mit Python einen Dummy-SMTP-Server ein und überprüfen Sie den Sendevorgang von Action Mailer
Erstellen Sie eine einfache GUI-App in Python
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Schreiben Sie die O_SYNC-Datei in C und Python
Führen Sie den Python-Interpreter im Skript aus