python / intermediate
Snippet
Asynchrone QuerySet-Iteration in asynchronen Django-Views
Django unterstützt native asynchrone Views mittels 'async def'. Beim Abfragen von Modellen in asynchronen Views ermöglicht 'async for' die nicht-blockierende Datenbank-Streaming-Iteration über QuerySets.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
from django.http import JsonResponsefrom .models import AuditLogasync def stream_audit_logs(request):log_titles = []async for entry in AuditLog.objects.filter(is_active=True).order_by('-created_at'):log_titles.append(entry.action_title)if len(log_titles) >= 50:breakreturn JsonResponse({'recent_actions': log_titles})
django
Erklärung
1
async def stream_audit_logs(request):
Deklariert einen asynchronen View-Handler, der mit ASGI-Anwendungsservern kompatibel ist.
2
async for entry in AuditLog.objects.filter(is_active=True).order_by('-created_at'):
Iteriert asynchron über QuerySet-Datensätze, ohne den asynchronen Event-Loop zu blockieren.
3
log_titles.append(entry.action_title)
Sammelt Felder von Modellinstanzen in einer Speicher-Akkumulatorliste.
4
return JsonResponse({'recent_actions': log_titles})
Gibt eine asynchrone HTTP-JSON-Antwort mit den abgerufenen Audit-Datensätzen zurück.