python / intermediate
Snippet
Django Klassenbasierte Views mit Mixin-Muster
Klassenbasierte Views (CBVs) in Django nutzen Pythons Mehrfachvererbung, um Funktionalität durch Mixins zu komponieren. LoginRequiredMixin aus django.contrib.auth.mixins stellt sicher, dass nur authentifizierte Benutzer auf den View zugreifen. Benutzerdefinierte Mixins wie BookFormMixin können zusätzlichen Kontext injizieren oder Formularverarbeitung modifizieren. Die Reihenfolge ist wichtig: Django liest Mixins von rechts nach links, also wird LoginRequiredMixin zuerst geprüft. CBVs trennen Anliegen: get() behandelt GET-Anfragen, post() behandelt POST, während ListView und CreateView eingebaute Paginierung und Formularverarbeitung bieten.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from django.views.generic import ListView, CreateViewfrom django.urls import reverse_lazyfrom django.contrib.auth.mixins import LoginRequiredMixinfrom myapp.models import Bookclass BookFormMixin:def get_form_kwargs(self):kwargs = super().get_form_kwargs()kwargs['user'] = self.request.userreturn kwargsclass BookListView(LoginRequiredMixin, BookFormMixin, ListView):model = Bookcontext_object_name = 'books'paginate_by = 20def get_queryset(self):return Book.objects.filter(owner=self.request.user)class BookCreateView(LoginRequiredMixin, BookFormMixin, CreateView):model = Bookfields = ['title', 'author', 'isbn']success_url = reverse_lazy('book-list')def form_valid(self, form):form.instance.owner = self.request.userreturn super().form_valid(form)
django
Erklärung
1
LoginRequiredMixin, BookFormMixin, ListView
Mehrfachvererbungsreihenfolge - Mixins werden von rechts nach links für Methodenauflösung geprüft
2
get_form_kwargs()
Override im Mixin, um zusätzliche Daten in die Formularinitialisierung zu injizieren
3
form_valid()
Callback nach erfolgreicher Formular提交 - setzt Owner vor dem Speichern