[PYTHON] Erstellen Sie eine RESTful-API mit dem Django Rest Framework

Ü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.

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.

Referenz

Umgebung

Mac OS 10.15 VSCode 1.39.2 pipenv 2018.11.26 Python 3.7.4 Django 2.2.6

Verfahren

Installieren Sie das Django Rest Framework

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 ... install-django-rest-framework.png

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"

Integrieren Sie das Django Rest Framework

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.

Definieren Sie einen Serializer

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 View.py

Ä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

Definieren Sie URL_pattern

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.

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.

ami_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)),
]

Überprüfen Sie den Vorgang mit dem Befehl curl

Ö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)

Recommended Posts

Erstellen Sie eine RESTful-API mit dem Django Rest Framework
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Django REST Framework mit Vue.js
Melden Sie sich mit dem Django Rest Framework an
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
[Django] Verwenden Sie MessagePack mit dem Django REST-Framework
CRUD GET mit Nuxt & Django REST Framework ②
CRUD POST mit Nuxt & Django REST Framework
CRUD GET mit Nuxt & Django REST Framework ①
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Grundlagen des Django REST-Frameworks
Tipps zum Django Rest Framework
CRUD PUT, DELETE mit Nuxt & Django REST Framework
Implementierung der Authentifizierungsfunktion in Django REST Framework mit djoser
Weitere neue Benutzerauthentifizierungsmethoden mit Django REST Framework
Erstellen Sie eine API mit Django
Erstellen Sie eine Homepage mit Django
Wenn Sie mit dem Django REST-Framework filtern möchten
Implementieren Sie die API mit explosiver Geschwindigkeit mithilfe des Django REST Framework
Django REST Framework Stolperstein
Implementieren Sie hierarchische URLs mit drf-verschachtelten Routern im Django REST-Framework
Erstellen Sie mit Django einen Datei-Uploader
Implementierung von CRUD mithilfe der REST-API mit Python + Django Rest Framework + igGrid
Logisches Löschen in Django, DRF (Django REST Framework)
Verstehen Sie den Komfort des Django Rest Framework
Ein Verwaltungstool, das sofort mit dem REST-Framework ng-admin + Django erstellt werden kann
Verschiedene Hinweise zum Django REST-Framework
Erstellen Sie mit Django Updateview einen Update-Bildschirm
Erstellen der ersten App mit Django Startprojekt
Überlegungen zum Design von Django REST Framework + Clean Architecture
Wie man mit verstümmelten Charakteren in json von Django REST Framework umgeht
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Internationalisierung mit Django
So generieren Sie automatisch ein API-Dokument mit dem Django REST-Framework und POST vom Dokumentbildschirm
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie mit Docker eine Umgebung aus Nginx + uWSGI + Python (Django)
Django REST Framework Ein wenig nützlich zu wissen.
CRUD mit Django
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Implementieren Sie die JWT-Anmeldefunktion im Django REST-Framework
So erstellen Sie eine Rest-API in Django
Manchmal möchten Sie mit DRF (Django REST Framework) auf View information from Serializer zugreifen.
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework
Listenmethode für verschachtelte Ressourcen im Django REST-Framework
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
[Django Rest Framework] Passen Sie die Filterfunktion mit Django-Filter an
Erstellen Sie mit Django dynamisch Tabellen im Schema und generieren Sie dynamisch Modelle
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
[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 Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Django 1.11 wurde mit Python3.6 gestartet
Entwicklungsverdauung mit Django
Erstellen Sie einen Django-Zeitplan
Django Python Web Framework
PDF mit Django ausgeben