Класс представления
Часть раздела Представления на основе классов путешествия по Django на Coddy. Урок 1 из 18.
В этом разделе мы создадим доску объявлений о вакансиях, и её главная страница — представление-функция, как и все предыдущие представления. В Django также можно написать представление в виде класса: унаследуйтесь от View и добавьте по одному методу для каждого HTTP-метода. GET-запрос вызывает get(), POST-запрос — post().
from django.views import View
class RecipeCountView(View):
def get(self, request):
total = Recipe.objects.count()
return HttpResponse(f"{total} recipes")Метод принимает self, затем request и возвращает ответ, как и представление-функция. Маршруту нужна функция, и .as_view() создаёт её из класса: path("count/", views.RecipeCountView.as_view()). При каждом запросе эта функция создаёт новый объект класса и вызывает соответствующий метод.
Если класс не определяет метод, например POST в этом случае, возвращается ответ 405 Method Not Allowed. Главное преимущество станет ясно дальше: в Django есть классы, которые уже выполняют распространённые задачи.
Задание
ЛегкоПреобразуй главную страницу в класс:
- В
jobs/views.pyзамени функциюhomeнаHomeView— классView, у которого методget()делает то же, что иhome. - В
jobs/urls.pyнаправь маршрут""на класс. Оставьname="home".
Нажми «Запустить»: на главной странице по-прежнему написано 12 jobs open.
Попробуйте сами
from django.shortcuts import render
from .models import Job
def home(request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
Все уроки раздела Представления на основе классов
2Универсальные представления для отображения
ListViewDetailViewПотренируйтесь самостоятельно: Песочница Django