[PYTHON] Erstellen Sie eine Web-API, die Bilder mit Django liefern kann

Überblick

Dieser Artikel führt Sie durch die Schritte eines Anfängers, der einen Coupon-Lieferservice für das iPhone mit einer RESTful-API und schnell entwickelt. Es ist eine sehr Umwegimplementierung, da sie implementiert wurde, während die technischen Elemente einzeln untersucht wurden.

Die Authentifizierungsfunktion wurde in der vorherigen Implementieren der API-Authentifizierungsfunktion von JWT in Django Rest Framework implementiert und ist zu einer API geworden, die in gewissem Maße der praktischen Verwendung standhält. Die aktuelle Situation ist jedoch, dass die aktuellen Coupons nur Textinformationen sind und in Bezug auf die Grafik schwach sind.

Daher werden wir dieses Mal ein Paket namens "Pillow" für die Verarbeitung von Bilddateien in Django verwenden, damit Couponbilder auch über die API verteilt werden können.

Selbst wenn eine neue API erstellt wird, die Bilder mit Django verarbeitet, ist der Teil, der sich auf "Pillow" bezieht, der gleiche, daher hoffe ich, dass er hilfreich ist.

Mechanismus zum Anzeigen von Bildern auf der Clientseite über die Web-API

  1. Halten Sie das Image auf dem Server auf der WebAPI-Seite
  2. Beantworten Sie die Anfrage mit Json, der URL des Bildes
  3. Der Client greift erneut auf den Server zu, um das Bild zu erfassen und auf dem Bildschirm anzuzeigen.

Referenz

Umgebung

Verfahren

Kissen einbauen

Da meine Umgebung eine virtuelle Python-Umgebung mit pipenv ist, installieren Sie das Kissen nach dem Betreten der Shell von pipenv wie folgt. Überprüfen Sie nach der Installation die Pipfile, um sicherzustellen, dass das Kissen installiert ist.

$ pipenv install pillow
$ cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
django = "*"
djangorestframework = "*"
django-filter = "*"
djangorestframework-jwt = "*"
pillow = "*"← hinzugefügt

[requires]
python_version = "3.7"

Wenn Sie eine Umgebung mit pip oder pip3 erstellen,

$ sudo pip install pillow
Oder
$ sudo pip3 install pillow

Installieren mit.

Definieren Sie ein Modell

Fügen Sie ein Modellfeld hinzu, um das Bild in der Coupon-Klasse von models.py zu speichern. Wenn Sie Pillow installieren, können Sie den Feldtyp "ImageField" verwenden, der Bilddateien verarbeitet.

Die Definition ist wie folgt. Der Teil upload_to = ist das erforderliche Minimum.

[Feldname] = models.ImageField(upload_to=‘[Relativer Pfad zu dem Ordner, in dem die Bilddateien gespeichert sind]’)

Der Startpunkt von "relativer Pfad des Ordners, in dem die Bilddatei gespeichert ist" ist der Pfad, der in "MEDIA_ROOT" angegeben ist, das in settings.py definiert ist.

Wie unten gezeigt, habe ich ein ImageField mit dem Feldnamen image hinzugefügt. In meinem Fall ist beim Erstellen der Migrationsdatei ein Fehler aufgetreten, es sei denn, ich habe null(null = True)zugelassen.

models.py



class Coupon(models.Model):
    code = models.CharField(max_length=20)
    benefit = models.CharField(max_length=1000)
    explanation = models.CharField(max_length=2000)
    image = models.ImageField(upload_to='images/', null=True) #hinzufügen
    store = models.CharField(max_length=1000)
    start = models.DateField()
    deadline = models.DateField()
    status = models.BooleanField()

Definieren Sie MEDIA_ROOT und MEDIA_URL in settings.py

Wie oben erwähnt, geben Sie in settings.py unter dem Ordner des Projektnamens die URL des Startpunkts an, wenn Sie auf die Bilddatei mit einem relativen Pfad in MEDIA_ROOT verweisen. In meinem Fall wollte ich einen Ordner zum Speichern von Bilddateien unter dem App-Ordner erstellen, daher habe ich die URL des App-Ordners angegeben. Da der Projektordner durch "BASE_DIR" definiert ist, wird er wie folgt beschrieben.

Es scheint, dass der Ordner zum Speichern der Bilddatei automatisch generiert wird, wenn das Bild zum ersten Mal hochgeladen wird, aber ich wusste es nicht, also habe ich es selbst mit "mkdir images" gemacht.

ami_coupon_api/settings.py


MEDIA_ROOT = os.path.join(BASE_DIR, 'coupon')

MEDIA_URL gibt die Startadresse an, wenn auf eine URL verwiesen wird. In meinem Fall lautet die Adresse beim Abrufen der Coupon-Modelldaten "[ip (Domäne)]: [Port] / api / coupons /". Wenn Sie sich also auf das Bild beziehen, lautet "[IP (Domäne)]: [Port". ] / api / coupons / imageswurde ab/ api / coupons /` festgelegt.

Projektname Ordner/settings.py


MEDIA_URL = '/api/coupons/'

Fügen Sie Einstellungen zu urls.py hinzu

Es ist erforderlich, urls.py festzulegen, um auf das Bild per URL zu verweisen. Öffnen Sie urls.py unter dem Projektnamenverzeichnis und fügen Sie die folgende Importanweisung und URLpatterns-Deklaration hinzu. Es ist eine Einstellung für den Umgang mit statischen Dateien wie Bildern, und es scheint, dass sie fast wie eine feste Phrase behandelt werden kann.

ami_coupon_api/urls.py


from django.conf import settings #Zur Bildreferenz hinzugefügt
from django.contrib.staticfiles.urls import static #Zur Bildreferenz hinzugefügt
from django.contrib.staticfiles.urls import staticfiles_urlpatterns #Zur Bildreferenz hinzugefügt


urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Fügen Sie nach Bedarf Einstellungen zu psettings.py hinzu

Wenn Sie das Django Rest Framework verwenden und ein Modellfeld festgelegt haben, das auf serializer.py reagiert, ändern Sie die Einstellung, um auf die URL der Bilddatei zu reagieren.

Der Teil von fields = unten. Im Fall von "__ all __" ist dies eine Einstellung, die auf die Werte aller Modellfelder reagiert, sodass keine Änderung erforderlich ist.

serializer.py



from rest_framework import serializers
from .models import Coupon

class CouponSerializer(serializers.ModelSerializer):
    class Meta:
        model = Coupon
        fields = '__all__'

Wandern

Da ich die Definition des Modells geändert habe, werde ich es migrieren, um die Änderung in der Datenbank widerzuspiegeln.

Erstellen Sie eine Migrationsdatei → Migrieren. (Wenn Sie pipenv verwenden, führen Sie es in der Shell der virtuellen Umgebung aus.)

$ python manage.py makemigrations [App Name]
$ python manage.py migrate

Funktionsprüfung

Damit sind die Einstellungen für den Umgang mit Bilddateien abgeschlossen. Daher habe ich die Administrationsseite von django verwendet, um das Bild direkt einzugeben und zu überprüfen, ob es tatsächlich angezeigt wird.

Sie können das Image aktualisieren, indem Sie den Django-Server starten, sich auf der Django-Administrationsseite anmelden und die Coupon-Modellseite öffnen. Aktualisieren Sie direkt das für den Gutschein erstellte Bild. edit_data.png

Verwenden Sie dann den Befehl curl, um den json der Antwort auf die GET-Anforderung abzurufen.

$ curl -X GET http://127.0.0.1:8000/api/coupons/

Wie unten gezeigt, ist die URL der Bilddatei enthalten. Kopieren Sie sie und greifen Sie mit einem Browser darauf zu.

[{"id": 1, "code": "0001", "vorteil": "1.000 Yen Rabatt von der Zahlung", "Erklärung": "Beschränkt auf Kunden, die 5.000 Yen oder mehr verwenden. Kann nicht mit anderen Gutscheinen verwendet werden. "," image ":" ** http://127.0.0.1:8000/api/coupons/images/coupon-image-001_GKrT1ju.png ** "," store ":" All store "," start ":" 2019 -10-01 "," Deadline ":" 2019-12-31 "," Status ": true}

Wenn das Bild des im Browser festgelegten Gutscheins angezeigt wird, ist dies erfolgreich. coupon_image.png

Recommended Posts

Erstellen Sie eine Web-API, die Bilder mit Django liefern kann
Tornado - Erstellen wir eine Web-API, die JSON problemlos mit JSON zurückgibt
Erstellen Sie mit Selenium ein Programm, mit dem Sie Ihr Lieblingsbild erstellen können
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Erstellen Sie einen BOT, der mit Discord registrierte Bilder wie Piktogramme aufrufen kann
Erstellen Sie eine Web-App, die mit Plotly Dash einfach visualisiert werden kann
Erstellen Sie eine API mit Django
Erstellen Sie eine Homepage mit Django
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Entwickeln Sie eine Web-API, die in DB gespeicherte Daten mit Django und SQLite zurückgibt
Erstellen Sie eine Webanwendung mit Django
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
Erstellen Sie mit Django eine API für die soziale Integration von Smartphone-Apps
Erstellen Sie mit Django einen Datei-Uploader
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
[LINE Messaging API] Erstellen Sie einen BOT, der eine Verbindung zu jemandem mit Python herstellt
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie einen Webdienst mit Docker + Flask
Ich habe eine WEB-Bewerbung bei Django gemacht
Das LXC Web Panel, das LXC mit einem Browser bedienen kann, war wunderbar
[Kann in 10 Minuten erledigt werden] Erstellen Sie schnell eine lokale Website mit Django
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
So erstellen Sie eine Rest-API in Django
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie einen Chatbot, der die kostenlose Eingabe mit Word2Vec unterstützt
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schreiben Sie eine Basisvorlage)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Authentifizierungsverarbeitung)
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Erstellen Sie eine PythonBox, die nach der PEPPER-Eingabe mit Random ausgegeben wird
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Speichern Sie Bilder mit Web Scraping
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Starten Sie einen einfachen WEB-Server, der den Header überprüfen kann
Erstellen Sie ein Lebensspiel, das manuell mit tkinter aktualisiert wird
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
Erstellen Sie eine Webanwendung mit Django
Web-API mit Python + Falcon
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Entwurf des Datenbankmodells)
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Kombiniere zwei Bilder mit Django
Echtzeit-Web mit Django-Kanälen
Erstellen Sie ein Verzeichnis mit Python
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann