pl:python:views
Różnice
Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
pl:python:views [2023/12/07 13:16] – [SingleObjectMixin] sindap | pl:python:views [2023/12/07 19:36] (aktualna) – [ProcessFormView] sindap | ||
---|---|---|---|
Linia 877: | Linia 877: | ||
==== SingleObjectMixin ==== | ==== SingleObjectMixin ==== | ||
- | '' | + | '' |
1. **Widok szczegółowy (DetailView): | 1. **Widok szczegółowy (DetailView): | ||
Linia 909: | Linia 909: | ||
W tym przykładzie '' | W tym przykładzie '' | ||
+ | |||
+ | Można założyć, że widok oparty na '' | ||
+ | |||
+ | Podobieństwa między widokiem '' | ||
+ | |||
+ | 1. **Pobieranie pojedynczego obiektu:** | ||
+ | * '' | ||
+ | |||
+ | 2. **Przekazywanie obiektu do szablonu:** | ||
+ | * Po pobraniu obiektu, można przekazać go do szablonu, podobnie jak w przypadku widoku FBV. | ||
+ | |||
+ | 3. **Dodatkowe operacje na obiekcie:** | ||
+ | * Możesz dostosować widok, aby wykonywał dodatkowe operacje na pobranym obiekcie przed przekazaniem go do szablonu. | ||
+ | |||
+ | Przykładowo, | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic.detail import SingleObjectMixin | ||
+ | from django.shortcuts import render | ||
+ | from .models import YourModel | ||
+ | |||
+ | class YourDetailView(SingleObjectMixin): | ||
+ | model = YourModel | ||
+ | template_name = ' | ||
+ | |||
+ | def get(self, request, *args, **kwargs): | ||
+ | # Pobierz pojedynczy obiekt modelu | ||
+ | self.object = self.get_object(queryset=YourModel.objects.all()) | ||
+ | | ||
+ | # Dodatkowe operacje na obiekcie (opcjonalne) | ||
+ | # ... | ||
+ | |||
+ | return render(request, | ||
+ | </ | ||
+ | |||
+ | W kodzie powyżej, '' | ||
==== SingleObjectTemplateResponseMixin ==== | ==== SingleObjectTemplateResponseMixin ==== | ||
Linia 916: | Linia 952: | ||
==== MultipleObjectMixin ==== | ==== MultipleObjectMixin ==== | ||
+ | '' | ||
+ | |||
+ | Główne zastosowania '' | ||
+ | |||
+ | 1. **Wyświetlanie listy obiektów: | ||
+ | * Najczęstszym zastosowaniem '' | ||
+ | |||
+ | 2. **Filtrowanie i sortowanie listy:** | ||
+ | * '' | ||
+ | |||
+ | 3. **Paginacja wyników:** | ||
+ | * W przypadku, gdy lista obiektów jest duża, '' | ||
+ | |||
+ | Przykład użycia '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic import ListView | ||
+ | from .models import YourModel | ||
+ | |||
+ | class YourListView(MultipleObjectMixin, | ||
+ | model = YourModel | ||
+ | template_name = ' | ||
+ | context_object_name = ' | ||
+ | paginate_by = 10 # liczba obiektów na stronę | ||
+ | |||
+ | def get_queryset(self): | ||
+ | # Dodatkowe operacje na zestawie danych (opcjonalne) | ||
+ | # ... | ||
+ | | ||
+ | return YourModel.objects.all() | ||
+ | </ | ||
+ | |||
+ | W tym przykładzie '' | ||
+ | |||
+ | Można przyjąć, że klasę '' | ||
+ | |||
+ | Przykładowo: | ||
+ | |||
+ | 1. **SingleObjectMixin: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Przykład z '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic import DetailView | ||
+ | from django.views.generic.detail import SingleObjectMixin | ||
+ | from .models import YourModel | ||
+ | |||
+ | class YourDetailView(SingleObjectMixin, | ||
+ | model = YourModel | ||
+ | template_name = ' | ||
+ | context_object_name = ' | ||
+ | </ | ||
+ | |||
+ | 2. **MultipleObjectMixin: | ||
+ | * '' | ||
+ | * Inne widoki, które operują na listach obiektów takie jak:'' | ||
+ | |||
+ | Przykład z '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic import ListView | ||
+ | from django.views.generic.list import MultipleObjectMixin | ||
+ | from .models import YourModel | ||
+ | |||
+ | class YourListView(MultipleObjectMixin, | ||
+ | model = YourModel | ||
+ | template_name = ' | ||
+ | context_object_name = ' | ||
+ | paginate_by = 10 | ||
+ | </ | ||
+ | |||
+ | Stosowanie odpowiednich '' | ||
==== MultipleObjectTemplateResponseMixin ==== | ==== MultipleObjectTemplateResponseMixin ==== | ||
Linia 922: | Linia 1033: | ||
==== FormMixin ==== | ==== FormMixin ==== | ||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Poniżej znajduje się przykład użycia '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic.edit import CreateView | ||
+ | from django.views.generic.edit import FormMixin | ||
+ | from .models import YourModel | ||
+ | from .forms import YourModelForm | ||
+ | |||
+ | class YourCreateView(FormMixin, | ||
+ | model = YourModel | ||
+ | form_class = YourModelForm | ||
+ | template_name = ' | ||
+ | success_url = '/ | ||
+ | |||
+ | def form_valid(self, | ||
+ | # Wywołuje się, gdy formularz jest poprawny. | ||
+ | # Tutaj możesz dodać dodatkową logikę przed zapisaniem formularza. | ||
+ | return super().form_valid(form) | ||
+ | </ | ||
+ | |||
+ | W tym przypadku '' | ||
+ | |||
+ | Podsumowując, | ||
==== ModelFormMixin ==== | ==== ModelFormMixin ==== | ||
+ | W Django, klasa '' | ||
+ | |||
+ | Oto przykład użycia '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic.edit import CreateView | ||
+ | from django.urls import reverse_lazy | ||
+ | from .models import YourModel | ||
+ | from .forms import YourModelForm | ||
+ | |||
+ | class YourCreateView(ModelFormMixin, | ||
+ | model = YourModel | ||
+ | form_class = YourModelForm | ||
+ | template_name = ' | ||
+ | success_url = reverse_lazy(' | ||
+ | |||
+ | def form_valid(self, | ||
+ | # Dodatkowe działania po poprawnej walidacji formularza | ||
+ | return super().form_valid(form) | ||
+ | </ | ||
+ | |||
+ | W powyższym przykładzie '' | ||
+ | |||
+ | Podobnie można użyć '' | ||
==== ProcessFormView ==== | ==== ProcessFormView ==== | ||
+ | |||
+ | W Django, klasa '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | Oto przykład użycia '' | ||
+ | |||
+ | <code python> | ||
+ | from django.views.generic.edit import ProcessFormView | ||
+ | from django.http import HttpResponseRedirect | ||
+ | from django.urls import reverse | ||
+ | from .forms import YourForm | ||
+ | |||
+ | class YourCustomFormView(ProcessFormView): | ||
+ | form_class = YourForm | ||
+ | template_name = ' | ||
+ | |||
+ | def form_valid(self, | ||
+ | # Dodatkowe operacje po poprawnej walidacji formularza | ||
+ | # Możesz dostosować to do swoich potrzeb, na przykład zapisywanie dodatkowych danych | ||
+ | return HttpResponseRedirect(reverse(' | ||
+ | </ | ||
+ | |||
+ | W tym przykładzie '' | ||
+ | |||
+ | W praktyce, jednak najczęściej korzystasz z bardziej specjalizowanych klas widoków, które korzystają z '' | ||
==== DeletionMixin ==== | ==== DeletionMixin ==== |
pl/python/views.1701951382.txt.gz · ostatnio zmienione: 2023/12/07 13:16 przez sindap