Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Python
Code

Anfängerleitfaden zum Django Rest Framework

by
Difficulty:BeginnerLength:MediumLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

Also sie lernen das Django Web Framework zu benutzen und Sie werden es lieben.  Aber Sie möchten eine attraktive, einfach zu bedienende API für Ihre Anwendung?  Suchen Sie nicht weiter als das Django Rest Framework (DRF).  Der DRF ist leistungsstark, durchdacht und überraschend einfach zu bedienen.  Es bietet eine attraktive, browserfähige Web-Version Ihrer API und die Option, unverarbeitetes JSON zurückzugeben.  Das Django Rest Framework bietet leistungsstarke Modellserialisierung, Anzeige von Daten mithilfe von standardfunktionsbasierten Sichten oder granulare Darstellung mit leistungsfähigen klassenbasierten Sichten für komplexere Funktionen.  Alles in einem vollständig REST-konformen Wrapper.  Lassen Sie uns gehen.

Die Grundlagen legen

Wenn Sie mit Python-Anwendungen arbeiten, ist es immer eine gute Idee, Ihre Entwicklung mit einer virtuellen Umgebung zu versehen.  Es verhindert Versionskonflikte zwischen Bibliotheken, die Sie in Ihrer Anwendung benötigen, und Bibliotheken, die Sie möglicherweise bereits auf Ihrem Rechner installiert haben. Es erleichtert die Installation von Abhängigkeiten in einem virtuellen env mit der Datei requirements.txt und schließlich die gemeinsame Nutzung Ihrer Entwicklungsumgebung andere Entwickler ein Kinderspiel.

Tuts + hat zwei exzellente Videos zur Installation von virtualenv und virtualenvwrapper.  Nehmen Sie sich ein paar Minuten Zeit, um durch diese Videos zu gehen, um virtualenv und virtualenvwrapper auf Ihrem Rechner installiert zu bekommen.  Wenn Sie sie bereits installiert haben, überspringen Sie den nächsten Abschnitt.

Einrichten Ihrer virtuellen Umgebung

Das erste, was wir als Teil unserer Anwendung tun werden, ist die Einrichtung der virtuellen Umgebung.  Geben Sie die folgenden Befehle in Ihr Terminal ein.

Es spielt keine Rolle, wo Sie sich im Dateisystem befinden, wenn diese Befehle ausgeführt werden.  Alle virtualenv-Dateien werden an einem zentralen Ort gespeichert und bei Bedarf aktiviert.

Installieren der Django-Anwendung

Da es in diesem Artikel nicht um Django selbst geht, habe ich etwas Zeit gespart, indem ich ein Repository mit der App erstellt habe, in der wir arbeiten.  Es ist eine einfache Bücherregal-Anwendung, die es uns erlaubt, Listen von Autoren und Büchern zu speichern.  Laden Sie das Companion-Repository zu diesem Artikel in das Verzeichnis Ihrer Wahl herunter, und führen Sie pip install -r requirements.txt aus, um alle Abhängigkeiten zu installieren.  Denken Sie daran, sicherzustellen, dass Sie die virtuelle Umgebung aktiviert haben, die wir im letzten Schritt eingerichtet haben.  Nachdem die Installation abgeschlossen ist, sollten Sie in der Lage sein, fab runserver einzugeben, um einen lokalen Webserver zu starten und einen Webbrowser zu öffnen, der auf http://127.0.0.1:8000/ verweist.  Wenn Sie eine Liste der Autoren auf dem Bildschirm sehen, können Sie loslegen.

Wenn Sie zu irgendeinem Zeitpunkt nicht die erwarteten Ergebnisse erhalten, versuchen Sie bitte, den Zweig Ihres lokalen Repositorys auf final zu setzen, um die Ergebnisse zu sehen: git checkout final.

Fab? Was ist das?

Fab == Fabric, ein Python-Task-Runner.  Aus den Dokumenten:

"Fabric ist eine Python-Bibliothek (2,5 oder höher) und ein Befehlszeilentool, um die Verwendung von SSH für Anwendungsbereitstellung oder Systemadministrationsaufgaben zu optimieren."

Während eine ausführlichere Diskussion über Fabric den Rahmen dieses Artikels sprengt, habe ich einige grundlegende Fab-Befehle implementiert, die das Arbeiten mit dieser Anwendung ein wenig erleichtern.  Sie haben den fab runserver-Befehl gesehen.  Es gibt auch den Befehl fab shell, der eine interaktive iPython-Shell im Kontext der Anwendung aufruft, und den Befehl fab syncdb, der den syncdb-Befehl von Django ausführt, um Änderungen in Modellen an die Datenbank zu synchronisieren.

Mit Serialisierung arbeiten

Eine wichtige Funktion des Django Rest Framework ist die eingebaute Modellserialisierung.  Mit nur wenigen Codezeilen können Sie aussagekräftige Darstellungen Ihrer Daten erstellen, die in verschiedenen Formaten bereitgestellt werden können.  Wie bereits erwähnt, wird unsere Anwendung eine einfache Bücherregal-App mit Autoren und Büchern sein.  Ich habe bereits die Autoren- und Buchmodelle für Sie erstellt, also öffnen Sie /app/bookreview/models.py.  Es sind bereits ein paar Autoren in der lokalen SQLite-Datenbank gespeichert, also öffnen wir eine interaktive Shell für unsere App und stöbern.  Wechseln Sie in Ihr Terminalfenster, vergewissern Sie sich, dass Sie sich im Verzeichnis ./app  befinden, und geben Sie den folgenden Befehl ein.

Nachdem die Shell geladen wurde, geben Sie die nächsten paar Zeilen ein, um einen Autorendatensatz aus der Datenbank abzurufen, der zufällig meiner ist.  Was für ein Zufall.  :)

In ähnlicher Weise können Sie alle Autorendatensätze mit einem anderen Befehl aus der Datenbank abrufen:

Leider gibt dies keine Daten zurück, die ein AJAX-Aufruf verstehen kann.  Also fügen wir einen Serializer für Autoren hinzu.  Schließen Sie die Shell, indem Sie quit eingeben und bookreview/serializers.py öffnen.  Geben Sie die nächsten Codezeilen ein, oder fügen Sie sie ein, und speichern Sie die Datei.

Ohne weitere Änderungen zu geben, gibt uns der Serializer eine Menge Power.  Gehen Sie zurück in die Shell und lassen Sie uns das überprüfen.

Lassen Sie uns ein paar weitere Zeilen Code hinzufügen und sehen, was unsere API uns im Browser zeigen wird, nachdem unsere Daten durch unseren neuen AuthorSerializer laufen.

Auschecken der Web-Browse-API

Öffnen Sie zunächst bookreview/urls.py und fügen Sie unmittelbar nach der index_view-Route die folgende Zeile hinzu:

Als nächstes öffnen Sie bookreview/views.py und fügen Sie diese Zeilen am Ende der Datei hinzu:

Stellen Sie dann sicher, dass Sie den Import für den AutorSerializer oben auf der Seite hinzufügen:

Die Standardansicht für das Django Rest Framework ist die APIView.  Sie können eigene Methoden zu get, put und delete definieren.  Es ist eine gute Möglichkeit, die Basisfunktionalität zu erhalten, aber trotzdem die Kontrolle über das Endergebnis zu haben.  In unserem Fall lassen wir den DRF die schwere Arbeit für uns übernehmen, indem wir die ListAPIView erweitern.  Wir müssen nur ein paar Informationen bereitstellen, damit der DRF die Teile verbinden kann.  Wir geben ihm das Author-Modell, damit es mit der Datenbank sprechen kann, und den AuthorSerializer, damit der DRF weiß, wie er die Informationen zurückgibt.  Wir werden nur mit einigen der eingebauten APIViews arbeiten, aber Sie können über alle Optionen auf der Django Rest Framework Website nachlesen.

Nachdem Sie diese Änderungen vorgenommen haben, stellen Sie sicher, dass der Server läuft, indem Sie fab runserver eingeben und dann die URL http://127.0.0.1:8000/authors/ eingeben.  Sie sollten eine ansprechend gestaltete API-Ansichtsseite mit einer Liste aller Autoren in der Datenbank sehen.

Jetzt, da wir die Autoren-API-Ansicht aktiviert haben, versuchen Sie, diese URL mit einem curl-Befehl zu treffen:

Ziemlich pfiffig eh? 

Geben den Autoren einige Bücher!

Während diese API ziemlich glatt ist, ist es Eins-zu-eins mit der Datenbank.  Lassen Sie uns unsere API-Ansicht erweitern, indem Sie einen komplexeren Datensatz für Autoren verfassen.  Öffnen Sie bookreview/serializers.py, und fügen Sie die folgende Codezeile vor der Klassendefinition AuthorSerializer hinzu.

Bevor wir dem AuthorSerializer Bücher hinzufügen können, müssen wir Bücher serialisieren. Das sollte Ihnen ganz vertraut aussehen.  Da es fast identisch mit dem AuthorSerializer ist, werden wir nicht darüber sprechen.

Fügen Sie als nächstes die folgende Zeile unmittelbar nach dem Docstring der AuthorSerializer-Klasse hinzu:

Fügen Sie dann books zur fields-Eigenschaft der inneren Meta-Klasse AuthorSerializer hinzu:

Laden Sie den Endpunkt /authors/ neu und Sie sollten nun eine Reihe von Büchern für jeden Autor sehen.  Nicht schlecht für nur ein paar Zeilen Code?

Guter Typ DRF in der Tat!

Verwenden Sie SerializerMethodField, um benutzerdefinierte Eigenschaften zu erstellen

Der Serializer ist clever ... wenn wir angeben, welches Modell innerhalb der inneren Metaklasse serialisiert werden soll, weiß er alles über dieses Modell ... Eigenschaften, Längen, Standardwerte und so weiter.  Beachten Sie, dass wir keine der im Modell direkt im Serializer gefundenen Eigenschaften definieren. Wir geben nur an, welche Felder in der Eigenschaft fields an die API zurückgegeben werden sollen.

Da der DRF bereits die Eigenschaften des Modells kennt, müssen wir uns nicht wiederholen.  Wenn wir wollten, könnten wir im BookSerializer explizit sein und die folgenden Zeilen hinzufügen ... und der DRF wäre genauso glücklich.

Die serializers.field-Methode ermöglicht Ihnen, auf eine vorhandene Eigenschaft des Modells, das source-Feld, zu verweisen, und ermöglicht Ihnen, bei der Rückgabe an den Endbenutzer explizit einen anderen Namen zu vergeben.  Aber was ist mit serializers.SerializerMethodField?  Dadurch können Sie im Wesentlichen eine benutzerdefinierte Eigenschaft erstellen, die nicht direkt mit dem Modell verknüpft ist und deren Inhalt das Ergebnis eines Methodenaufrufs ist.  In unserem Fall geben wir eine URL zurück, die eine Liste der Orte enthält, an denen Sie das Buch kaufen können.  Fügen wir diese benutzerdefinierte Methode jetzt hinzu.

Unmittelbar nach dem DocString BookSerializer fügen Sie die folgende Zeichenfolge hinzu:

Fügen Sie dann nach class Meta-Definition BookSerializer folgende Zeilen hinzu:

Dann müssen wir unsere neue Eigenschaft zur Liste der Felder hinzufügen.  Ändern Sie das:

zu diesem:

Laden Sie den Endpunkt /authors/ neu und Sie sollten nun eine URL sehen, die zusammen mit den anderen Informationen über das Buch zurückkommt.

Hinzufügen eines Autorenendpunkts

Wir haben bereits eine Liste von Autoren, aber es wäre nett für jeden Autor, eine eigene Seite zu haben ... genau wie MySpace, oder?  Fügen Sie einen API-Endpunkt hinzu, um einen einzelnen Autor anzuzeigen.  Öffne urls.py und füge folgende Zeile nach autor-list hinzu:

Öffnen Sie dann views.py und fügen Sie nach der AuthorView-Klasse die folgenden Zeilen hinzu:    

Klicken Sie auf einen der Autornamen auf der Indexseite und Sie sollten sehen, dass die Autoreninstanzseite geladen wird.

Refactoring für den Gewinn!

Jetzt wäre eine gute Zeit für ein schnelles Refactoring.  Da Django die Möglichkeit bietet, Ihre Routen zu benennen, können wir die Route mit diesem Namen referenzieren.  Das verhindert, dass wir die URL manuell erstellen müssen.  Öffnen Sie templates/index.html und tauschen Sie das folgende Stück aus:

mit dieser Linie

Daten speichern: Lassen Sie das DRF für sich arbeiten!

Bis jetzt wurde unsere App nur gelesen.  Es ist Zeit, einige Daten zu speichern.  Öffnen Sie templates/index.html und fügen Sie die folgenden Zeilen unter dem authors-Header hinzu:

Geben Sie einen Namen ein, wenn Sie möchten, und drücken Sie submit ... und presto, erhalten Sie ... einen Fehler?

Der DRF ist nicht ganz so magisch ... oder?

Öffnen Sie views.py, ändern Sie die Klasse, die AuthorView von generics.ListAPIView auf generics.ListCreateAPIView erweitert.  Dann versuchen Sie es erneut.  Boom! Sie sind ein Autor!  Und Ihr Sportlehrer der vierten Klasse sagte, Sie würden niemals etwas erreichen.  Aber was wusste er, er muss den ganzen Tag verschwitzte Socken machen.  Gehrn Sie zurück zur Hauptseite des Autors, um Ihren Namen in den Lichtern zu sehen.

Was ist gerade passiert?  Die von uns verwendete Standard-API-Ansicht erlaubte nur GET-Anfragen an den Endpunkt des Autors. Indem wir es zu ListCreateAPIView änderten, sagten wir DRF, dass wir auch POST-Anfragen zulassen wollten.  Es macht alles andere für uns. Wir könnten genauso gut unsere eigene post-Methode innerhalb AuthorView definieren und dort einige zusätzliche Dinge tun.  Es könnte so aussehen:

Denken Sie daran, dass DRF zwar die Datenbankintegrität auf der Grundlage der Eigenschaften des Modells erzwingt, wir jedoch keine Sicherheit festlegen, wer auf dieses Formular zugreifen oder dieses verwenden darf.  Das Eintauchen in die Sicherheit, das Anmelden und Verwalten von Berechtigungen liegt außerhalb des Geltungsbereichs dieses Artikels, aber es genügt zu sagen, dass DRF über Funktionen verfügt, die den Zugriff auf die Ansichten erlauben, mit denen Sie gearbeitet haben, und es ist ziemlich einfach einzurichten. 

Wir beenden

Sie haben jetzt eine Menge über das Django Rest Framework gelernt: wie Sie eine Web-fähige API implementieren, die JSON für Sie zurückgeben kann, wie Sie Serializer konfigurieren und transformieren können und wie Sie klassenbasierte Ansichten zum Abstrahieren verwenden können Mustercode.

Das DRF hat mehr zu bieten als die wenigen Bits, die wir abdecken konnten, aber ich hoffe, dass Sie es für Ihre nächste Anwendung nützlich finden.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.