Klasy widoków (CBV) w Django
Django pozwala tworzyć widoki na dwa sposoby:
- FBV (Function-Based Views) – klasyczne widoki oparte na funkcjach.
- CBV (Class-Based Views) – widoki oparte na klasach, które ułatwiają ponowne wykorzystanie kodu i rozszerzanie logiki.
1. Różnica między FBV a CBV
Function-Based Views (FBV)
- Definiowane jako zwykłe funkcje w Pythonie.
- Intuicyjne i szybkie do napisania dla prostych przypadków.
- Mogą szybko stać się nieczytelne przy bardziej złożonej logice.
Przykład FBV:
post_list.html:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Lista postów</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 40px;
background-color: #f9f9f9;
}
h1 {
color: #333;
}
.post {
background: #fff;
border: 1px solid #ddd;
border-radius: 10px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.post h2 {
margin-top: 0;
color: #007acc;
}
.date {
font-size: 0.9em;
color: #777;
}
</style>
</head>
<body>
<h1>Lista postów</h1>
{% for post in posts %}
<div class="post">
<h2>{{ post.title }}</h2>
<p class="date">Opublikowano: {{ post.published_date|date:"d.m.Y H:i" }}</p>
<p>{{ post.content|truncatewords:30 }}</p>
</div>
{% empty %}
<p>Brak postów do wyświetlenia.</p>
{% endfor %}
</body>
</html>
urls.py:
urlpatterns = [
path('', views.post_list, name='list'),
]
Class-Based Views (CBV)
- Definiowane jako klasy dziedziczące po
Viewlub widokach generycznych. - Wykorzystują metody zamiast instrukcji warunkowych (
get(),post(),put(),delete()itd.). - Bardziej elastyczne – łatwo rozszerzać i modyfikować logikę przez dziedziczenie i miksiny.
Przykład CBV:
urls.py:
urlpatterns = [
path('list/', PostListView.as_view(), name='list'),
]
2. Generic Views (widoki generyczne)
Django dostarcza zestaw gotowych widoków, które znacznie przyspieszają implementację CRUD.
2.1. ListView – lista obiektów
Automatycznie pobiera wszystkie obiekty modelu i przekazuje do szablonu.
2.2. DetailView – szczegóły obiektu
Renderuje pojedynczy obiekt na podstawie pk lub slug.
2.3. CreateView – tworzenie obiektu
Automatycznie tworzy formularz do dodawania obiektów.
2.4. UpdateView – edycja obiektu
Formularz do edycji istniejących danych.
2.5. DeleteView – usuwanie obiektu
Wyświetla stronę potwierdzającą usunięcie i usuwa obiekt po POST.
3. Miksiny (Mixins)
Miksiny to klasy wielokrotnego dziedziczenia, które dodają do widoków określone funkcjonalności.
Najczęściej używane miksiny:
3.1. LoginRequiredMixin
Wymaga zalogowania użytkownika:
3.2. PermissionRequiredMixin
Wymaga posiadania określonego uprawnienia:
3.3. UserPassesTestMixin
Pozwala zdefiniować własny warunek dostępu: