Django Python REST

DRF: Schnelleres Serialisieren mit orjson

Die Geschwindigkeit, mit der APIs Daten serialisieren und deserialisieren, ist ein wichtiger Faktor für die Leistung einer Webanwendung.


4 Minuten Lesezeit
10 Nov 2024
DRF: Schnelleres Serialisieren mit orjson

Was lerne ich in diesem Kurs?

In diesem Artikel zeigen wir, wie du das drf-orjson-renderer - Package nutzen kannst, um Django REST Framework mit orjson zu beschleunigen.

Orjson

In Django REST Framework (DRF) übernimmt die Serialisierung die Aufgabe, Daten von Python-Objekten in JSON zu konvertieren und umgekehrt. Die Python-Standardbibliothek bietet hierfür das json-Paket, welches jedoch bei großen oder häufigen Datenabfragen an seine Grenzen stößt. Eine performantere Alternative ist die Verwendung von orjson, einer in RUST geschriebenen JSON-Bibliothek für Python, die vor allem bei großen Datenmengen deutliche Geschwindigkeitsvorteile bietet.

Voraussetzungen

Bevor du mit diesem Tutorial beginnst, stelle sicher, dass du Django und Django REST Framework bereits installiert hast. Falls noch nicht, installiere sie mit:

pip install django djangorestframework

Anschließend installierst du die orjson-Renderer-Bibliothek:

pip install drf-orjson-renderer

Projekt- und App-Erstellung

Falls du noch kein Django-Projekt hast, kannst du es mit den folgenden Befehlen erstellen:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

Vergiss nicht, deine App myapp in den INSTALLED_APPS der settings.py deines Projekts hinzuzufügen.

Erstellen des Modells

In diesem Beispiel erstellen wir ein einfaches Modell namens Article, das in unserer API als JSON serialisiert werden soll:

# myapp/models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

Führe nun die Migrationen durch, um das Modell in der Datenbank zu erstellen:

python manage.py makemigrations
python manage.py migrate

Erstellen eines Serializers

Für Django REST Framework benötigen wir einen Serializer, der die Article-Modelldaten in JSON konvertiert. Füge in serializers.py folgenden Code hinzu:

# myapp/serializers.py
from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content']

Einrichten der Views und URLs

Erstelle ein ModelViewset, das auf den Article-Serializer zugreift, um CRUD-Operationen (Erstellen, Lesen, Aktualisieren und Löschen) zu ermöglichen:

# myapp/views.py
from rest_framework.viewsets import ModelViewSet
from .models import Article
from .serializers import ArticleSerializer

class ArticleViewSet(ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

Nun registrieren wir dieses Viewset in den URLs, damit sie über api/articles/ aufgerufen werden kann.

# myapp/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ArticleViewSet

router = DefaultRouter()
router.register(r'articles', ArticleViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

Vergiss nicht, diese URL-Konfiguration in der Haupt-urls.py des Projekts zu importieren.

Konfigurieren von drf-orjson-renderer

Nun kommen wir zur Kernoptimierung: das Einrichten des drf-orjson-renderer. Durch diese Konfiguration nutzen wir orjson für schnelles JSON-Rendering.

Öffne settings.py und passe die DRF-Einstellungen an, um den ORJSONRenderer als Standard-Renderer zu verwenden:

# settings.py
REST_FRAMEWORK = {
    "DEFAULT_RENDERER_CLASSES": (
        "drf_orjson_renderer.renderers.ORJSONRenderer",
        "rest_framework.renderers.BrowsableAPIRenderer",
    ),
}

Dies legt fest, dass DRF für alle JSON-Serialisierungen orjson verwenden soll, was die Leistung im Vergleich zu den Standard-Renderern verbessert. Beim Rendering handelt es sich um den Prozess, ausgehende Daten nach JSON zu serialisieren.

Die Optionen von orjson ermöglichen es, spezielle Datentypen wie dataclasses, numpy-Arrays und Nicht-String-Schlüssel (z. B. Zahlen) in JSON zu serialisieren, was die Kompatibilität und Flexibilität bei der Verarbeitung komplexer Datenstrukturen erhöht. So lassen sich auch wissenschaftliche oder numerische Daten effizienter und ohne zusätzliche Konvertierungsschritte in JSON speichern.

REST_FRAMEWORK = {
    "ORJSON_RENDERER_OPTIONS": (
        orjson.OPT_NON_STR_KEYS,
        orjson.OPT_SERIALIZE_DATACLASS,
        orjson.OPT_SERIALIZE_NUMPY,
    ),
}

Um eingehende Daten mithilfe orjsons zu parsen, legen wir noch den Parser fest:

REST_FRAMEWORK = {
    "DEFAULT_PARSER_CLASSES": (
        "drf_orjson_renderer.parsers.ORJSONParser",
    ),
}

Registrieren des Modells im Admin-Dashboard

Um das Modell Article im Django-Admin-Dashboard zu verwalten, registriere es in admin.py:

# myapp/admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'content')
    search_fields = ('title',)

Dies ermöglicht es dir, Artikel im Admin-Bereich hinzuzufügen, zu ändern und zu löschen.

Testen der API

Starte den Server und rufe die API auf, um die Leistung zu testen:

python manage.py runserver

Besuche http://127.0.0.1:8000/api/articles/ – hier solltest du eine Liste der Article-Daten als JSON-Antwort sehen. Durch orjson wird die JSON-Ausgabe schneller bereitgestellt, was bei großen oder häufigen Datenanforderungen spürbare Verbesserungen bringen kann.

Online- und Präsenzkurse zum Thema

Finden Sie interessante und zum Thema passende Kurse

Django Intensiv Schulung

Lernen Sie Django in nur 5 Tagen mit diesem umfassenden Intensivkurs! Vom Einstieg in die Entwicklung Ihrer ersten Webanwendung bis hin zu fortgeschrittenen Themen wie API-Entwicklung und Testing – dieser Kurs deckt alles ab. Perfekt für Entwickler, die schnell produktiv mit Django arbeiten möchten.

5 Tage Vollzeit Online

Nächster Termin: 6. Januar 2025
Preis pro Person: 1600,00 EUR

Rabattaktion: 3 für den Preis von 2!

Django Framework für Fortgeschrittene

Entdecken Sie die fortgeschrittenen Funktionen von Django in unserem intensiven Aufbaukurs. Dieser Kurs richtet sich an Entwickler, die bereits mit den Grundlagen von Django vertraut sind und ihre Fähigkeiten auf das nächste Level bringen möchten. Lernen Sie, wie Sie komplexe Anwendungen mit Docker erstellen, eine CD/CI-Pipeline anlegen, APIs integrieren und das Projekt auf einen Server deployen.

5 Tage Vollzeit Online

Nächster Termin: 10. März 2025
Preis pro Person: 1900,00 EUR

Rabattaktion: 3 für den Preis von 2!

REST Api entwicklen mit Django

In diesem intensiven 5-Tage-Seminar lernen Entwickler, professionelle REST-APIs mit dem Django REST Framework zu erstellen, zu optimieren und zu testen.

5 Tage Vollzeit Online

Nächster Termin: 27. Januar 2025
Preis pro Person: 1600,00 EUR

Rabattaktion: 3 für den Preis von 2!