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

Задание

Легко

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

  1. В jobs/views.py замени функцию home на HomeView — класс View, в котором метод get() делает то же, что и home.
  2. В 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