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.
In der vorherigen Version TableView mit Swifts TableViewCell frei anpassen erfasst die App die in der Datenbank verwalteten Couponinformationen über die API und zeigt sie im Listenformat an. Ich habe es so weit geschaffen, dass ich es tun kann.
Als Nächstes ändern wir diese API in eine RESTful-API. Um den Code beim Umbau drastisch zu ändern, implementieren wir eine API, die nur einmal auf alle Couponinformationen mit GET reagiert, und ändern sie dann so, dass sie entsprechend der Anforderung auf die Couponinformationen reagiert.
Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6
Ich erstelle ein Python-Projekt (virtuelle Umgebung) mit pipenv, also installiere dort das Django Rest Framework. Geben Sie die pipenv-Shell ein und führen Sie den Installationsbefehl aus.
$ pipenv shell #Betritt die Shell
$ pipenv install djangorestframework #Installationsausführung
Terminal wird installiert ...
Wenn Sie nach Abschluss der Installation in die Pip-Datei schauen, werden Sie feststellen, dass "djangorest framework" zu "[packages]" hinzugefügt wurde.
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
django = "*"
djangorestframework = "*"
[requires]
python_version = "3.7"
Fügen Sie einfach das installierte rest_framework
zu INSTALLED_APPS = {
in settings.py
unter dem Projektnamenverzeichnis hinzu.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'coupon',
'rest_framework', #hinzufügen
]
Sie können jetzt das Django Rest Framework verwenden.
Um das Rest Framework verwenden zu können, benötigen Sie ein Modul namens Serializer. Erstellen und implementieren Sie die Serializer-Datei selbst im Anwendungsverzeichnis.
Ich habe es wie folgt implementiert.
coupon/serializer.py
from rest_framework import serializers #Importieren Sie das Django Rest Framework
from .models import Coupon # models.Importieren Sie die Gutscheinklasse von py
class CouponSerializer(serializers.ModelSerializer):
class Meta:
model = Coupon #Legen Sie den zu behandelnden Modellnamen fest
fields = '__all__'
Im obigen Code gibt fields
die Modellfelder (hier Couponinformationen) an, auf die Sie antworten möchten. Wenn Sie auf alle Elemente antworten möchten, ohne etwas anzugeben, verwenden Sie "__ all __".
Ändern Sie views.py
für die Verwendung mit dem Django Rest Framework.
Der Code sieht folgendermaßen aus: Es ist sehr einfach.
views.py
from django.shortcuts import render
from .models import Coupon
from rest_framework import viewsets, filters
from .serializer import CouponSerializer
class CouponViewSet(viewsets.ModelViewSet):
queryset = Coupon.objects.all() #Holen Sie sich alle Daten
serializer_class = CouponSerializer
Bearbeiten Sie ami_coupon_api / urls.py
und coupon / urls.py
. In der Tat scheint es besser zu sein, von "coupon / urls.py" zu bearbeiten.
Der bearbeitete Inhalt von coupon / urls.py
lautet wie folgt.
router.register
der URL und der view.py-Klasse (in diesem Fall CouponViewSet) zu, die aufgerufen werden sollen, wenn die URL angefordert wird.coupon/urls.py
from django.urls import path
from . import views
from rest_framework import routers
from .views import CouponViewSet
router = routers.DefaultRouter()
router.register(r'coupons', CouponViewSet)
Oben wird der Teil "Gutscheine" von "Gutscheinen" nach der Anforderungs-URL hinzugefügt.
Der bearbeitete Inhalt von ami_coupon_api / urls.py
lautet wie folgt.
django.conf.urls
hinzucoupon / urls.py
definierten Router als coupon_routerapi /
ein, um mit dem vom Router festgelegten Objekt fortzufahrenami_coupon_api/urls.py
from django.contrib import admin
from django.urls import path,include
from django.conf.urls import url, include
from coupon.urls import router as coupon_router
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include(coupon_router.urls)),
]
Öffnen Sie ein neues Terminal und versuchen Sie es mit GET-, POST- und PUT-Anforderungen. So schreiben Sie eine Anfrage wie folgt. -X ist eine Option zum Angeben von HTTP-Methoden (GET, POST, PUT usw.). Beachten Sie, dass GET und POST ohne Angabe ausgeführt werden können.
$ curl -X [HTTP-Methode] [URL] [Parameter anfordern]
Versuchen Sie es mit GET. Es sind keine Anforderungsparameter angehängt.
$ curl -X GET http://127.0.0.1:8000/api/coupons/
Dieser JSON wird zurückgegeben.
[{"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. "," store ":" Alle Geschäfte "," start ":" 2019-10-01 "," Deadline ":" 2019-12-31 "," status ": true}, {" id ": 2," code ":" 0002 "," Vorteil ":" 10% Rabatt auf Ihre Rechnung! "," Erklärung ":" Kann nicht mit anderen Gutscheinen kombiniert werden "," Geschäft ":" Yurakucho Geschäft "," Start ":" 2019-10 -01 "," Deadline ":" 2019-12-31 "," Status ": true}, {" id ": 3," Code ":" 0003 "," Benefit ":" [nur Halloween] Verkleidung 30% Rabatt, wenn Sie in den Laden kommen "," Erklärung ":" Nur für Kunden, die als 50% oder mehr des gesamten Körpers verkleidet sind (Beurteilung ist das Gefühl des Personals). Kann nicht mit anderen Gutscheinen verwendet werden "," Laden ":" Kanda Store "," Start ":" 2019-10-31 "," Deadline ":" 2019-10-31 "," Status ": true}, {" ID ": 4," Code ":" 0004 ", "Vorteil": "[nur September] Mondbeobachtungsknödelservice", "Erklärung": "Kunden, die dies wünschen, einen Mondbeobachtungsknödel geben! Kann in Kombination mit anderen Gutscheinen verwendet werden!", "Geschäft": "Alle Geschäfte" , "Start": "2019-09-01", "Frist": "2019-09-30", "Status": true}, {"id": 5, "Code": "0005", "Vorteil" : "[Nur Regentage] 15% Rabatt auf die Zahlung", "Erklärung": "Nur verfügbar, wenn Gutscheine geliefert werden. Kann nicht mit anderen Gutscheinen kombiniert werden", "Geschäft": "Alle Geschäfte", "Start" ":" 2019-10-01 "," Frist ":" 2019-12-31 "," Status ": false}, {" id ": 6," Code ":" 0006 "," Benefit ":" [ Nur Sonntag] Cheers Tequila Service "," Erklärung ":" Wir werden Tequila für die Anzahl der Personen servieren. Kann mit anderen Gutscheinen verwendet werden. "," Store ":" Kanda Store "," Start ":" 2019-11-03 " "d eadline ":" 2019-12-01 "," status ": true}]
Versuchen Sie es mit POST.
curl -X POST http://127.0.0.1:8000/api/coupons/ -d "code=0007" -d "benefit=Ab der Kasse 19%ziehen" -d "explanation=Begrenzt vom 29. bis 31. Dezember." -d "store=Kanda-Laden" -d "start=2019-12-29" -d "deadline=2019-12-31" -d "status=true"
Wenn alles gut geht, werden die POST-Daten in json zurückgegeben.
{"ID": 7, "Code": "0007", "Vorteil": "19% Rabatt von der Kasse", "Erklärung": "Nur 29. bis 31. Dezember.", "Geschäft": "Kanda Store", "Start": "2019-12-29", "Deadline": "2019-12-31", "Status": true}
Versuchen Sie es mit PUT. Zum Zeitpunkt der PUT muss die HTTP-Methode angegeben werden. Noch wichtiger ist, dass Sie ** den Primärschlüssel der Tabelle in der URL angeben **. Im Couponmodell ist "id" der Primärschlüssel. Geben Sie daher die ID der Daten, die Sie überschreiben möchten (in diesem Fall 7), am Ende der URL an.
curl -X PUT http://127.0.0.1:8000/api/coupons/7/ -d "code=0007" -d "benefit=Ab der Kasse 19%ziehen" -d "explanation=Begrenzt vom 29. bis 31. Dezember. Kann nicht mit anderen Gutscheinen verwendet werden" -d "store=Kanda-Laden" -d "start=2019-12-29" -d "deadline=2019-12-31" -d "status=true"
Wenn alles gut geht, werden die überschriebenen Daten in json zurückgegeben.
{"ID": 7, "Code": "0007", "Vorteil": "19% Rabatt von der Zahlung", "Erklärung": "Nur 29. bis 31. Dezember. Kombiniert mit anderen Gutscheinen Unmöglich "," speichern ":" Kanda speichern "," starten ":" 29.12.2019 "," Frist ":" 31.12.2019 "," Status ": true}
Versuchen Sie es mit LÖSCHEN. Führen Sie die POST-Anforderung erneut aus, um einen Gutschein mit der ID = 8 zu erstellen. Stellen Sie sicher, dass der Gutschein id = 8 in der GET-Anforderung oder in der Django-Serverkonsole hinzugefügt wurde.
Löschen Sie anschließend den Gutschein mit der ID = 8 in der folgenden Anfrage. Wie bei PUT muss der Primärschlüssel des zu löschenden Coupons angegeben werden.
curl -X DELETE http://127.0.0.1:8000/api/coupons/8/
Wenn alles gut geht, wird nichts zurückgegeben. Stellen Sie sicher, dass der Gutschein id = 8 in der GET-Anforderung oder in der Django-Serverkonsole gelöscht wurde.
Bisher wurde das grundlegende Rest Framework abgeschlossen. Von hier aus werden Filter und Authentifizierungsfunktionen hinzugefügt, um nur Gutscheine zu erhalten, die die Bedingungen erfüllen. ](Https://qiita.com/Ajyarimochi/items/7e22de20292ca57ea8dc)