In diesem Artikel zeigen wir, wie du das drf-orjson-renderer - Package nutzen kannst, um Django REST Framework mit orjson zu beschleunigen.
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.
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
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.
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
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']
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.
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",
),
}
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.
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.
Finden Sie interessante und zum Thema passende Kurse
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!
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!
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!