python / expert
Snippet
Parametrisierter View-Dekorator für dynamische Anfragen-Ablaufsteuerung
Höhere Funktionen in Python können den Steuerungsfluss ändern, bevor Django-Views erreicht werden. Durch das Erstellen von closures-basierten Dekoratoren wird die Anfragenausführung basierend auf benutzerdefinierten Bedingungen wie Anfrage-Headern oder Zugriffstoken frühzeitig beschränkt oder abgelehnt.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from functools import wrapsfrom django.http import HttpResponseForbidden, HttpRequestfrom typing import Callable, Anydef require_header_flag(header_name: str, expected_value: str):"""Higher-order decorator controlling view execution flow based on request headers."""def decorator(view_func: Callable[..., Any]) -> Callable[..., Any]:@wraps(view_func)def _wrapped_view(request: HttpRequest, *args: Any, **kwargs: Any):header_val = request.headers.get(header_name)if header_val != expected_value:return HttpResponseForbidden(f"Missing or invalid header: {header_name}")return view_func(request, *args, **kwargs)return _wrapped_viewreturn decorator
django
Erklärung
1
def require_header_flag(header_name: str, expected_value: str):
Äußere Factory-Funktion, die Parameter entgegennimmt, um das Dekorator-Verhalten anzupassen.
2
def decorator(view_func: Callable[..., Any]) -> Callable[..., Any]:
Zwischen-Dekorator, der die Ziel-Django-View-Funktion entgegennimmt.
3
@wraps(view_func)
Bewahrt Docstrings, Funktionsnamen und Metadaten der ursprünglichen View-Funktion.
4
if header_val != expected_value: return HttpResponseForbidden(...)
Verzweigter Steuerungsfluss, der die View-Ausführung stoppt und eine HTTP 403-Antwort zurückgibt, wenn die Header-Validierung fehlschlägt.