Класс представления
Часть раздела Представления на основе классов путешествия по 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