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.
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.
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()
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/'
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)
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__'
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
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.
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.
Recommended Posts