python / intermediate
Snippet
Django View Decorators für Zugriffskontrolle
Django Decorators bieten eine saubere Möglichkeit, Funktionen zu Views hinzuzufügen, ohne deren Kernlogik zu ändern. login_required stellt sicher, dass nicht authentifizierte Benutzer zur Anmeldung weitergeleitet werden. user_passes_test ermöglicht benutzerdefinierte Berechtigungsfunktionen für granulare Zugriffskontrolle. require_http_methods schränkt ein, welche HTTP-Methoden eine View akzeptiert. Diese Decorators folgen dem DRY-Prinzip, indem sie übergreifende Anliegen zentralisieren.
snippet.py
1
from django.contrib.auth.decorators import login_required, user_passes_test\nfrom django.http import HttpResponseForbidden\nfrom django.views.decorators.http import require_http_methods\n\ndef is_admin_or_moderator(user):\n return user.is_authenticated and (\n user.is_staff or user.is_superuser or\n getattr(user, 'role', None) in ['admin', 'moderator']\n )\n\n@login_required\ndef user_dashboard(request):\n return render(request, 'dashboard.html')\n\n@user_passes_test(is_admin_or_moderator)\ndef manage_users(request):\n users = User.objects.all()\n return render(request, 'manage_users.html', {'users': users})\n\n@require_http_methods(["POST", "GET"])\ndef api_endpoint(request):\n if request.method == 'POST':\n data = json.loads(request.body)\n return JsonResponse({'status': 'success', 'data': data})\n return JsonResponse({'status': 'ready'})
django
Erklärung
1
def is_admin_or_moderator(user):
Definiere benutzerdefinierte Berechtigungsprüffunktion, die Boolean zurückgibt
2
@login_required
Decorator, um Authentifizierung vor Zugriff auf View zu erfordern
3
@user_passes_test(is_admin_or_moderator)
Decorator, der benutzerdefinierte Berechtigungsfunktion auf View anwendet
4
@require_http_methods(["POST", "GET"])
Decorator zum Einschränken akzeptierter HTTP-Methoden für View