Menu
CoddyTech

Класс представления

Часть раздела Представления на основе классов путешествия по 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 есть классы, которые уже выполняют распространённые задачи.

challenge icon

Задание

Легко

Преобразуй главную страницу в класс:

  • В 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})

Все уроки раздела Представления на основе классов

Потренируйтесь самостоятельно: Песочница Django