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

from django.contrib.admin.decorators import login_required
from django.http import HttpResponse
from django.utils.decorators import method_decorator
from django.view.generic import View

class IndexView(View):

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    def get(self, request):
        return HttpResponse('Hello world')
from django.http import HttpResponse
from django.view.generic import View

class LoginRequiredMixin(object):

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated():
            raise PermissionDenied()
        return super().dispatch(request, *args, **kwargs)

class IndexView(LoginRequiredMixin, View):

    def get(self, request):
        return HttpResponse('Hello world')

ArchiveIndexView

class django.views.generic.ArchiveIndexView

Представление для вывода списка записей, отсортированных по убыванию значения даты.

Наследник:

class SomeArchiveView(ArchiveView):
    model = SomeModel
    date_field = 'created'
template_name_suffix

Суффикс для шаблона, по умолчанию ‘_archive’

CreateView

class django.views.generic.CreateView

Представление для создания нового элемента модели

Наследник:

class FeedView(CreateView):
    model = models.Post
    template_name = "feed.html"
    success_url = reverse_lazy("index")
    fields = []
    form_class = Form

    def form_valid(self, form):
        return super().form_valid(form)
template_name_suffix

Суффикс для шаблона, по умолчанию ‘_form’

DateDetailView

class django.views.generic.DateDetailView

DayArchiveView

class django.views.generic.DayArchiveView

Представление для списка записей по дням

Наследник:

class SomeDayArchiveView(DayArchiveView):

    model = SomeModel
    date_field = 'created'
    make_object_list = True
template_name_suffix

Суфикс для шаблона, по умолчанию “_archive_day”

DeleteView

class django.views.generic.DeleteView

Вьюха для удаления объекта из БД

DetailView

class django.views.generic.DetailView

Вьюха для отображения информации объекта из БД

Наследник:

class SomeDetailView(DetailView):
    model = SomeModel

FormView

class django.views.generic.FormView
from django.core.urlresolvers import reverse_lazy

class GenericFormView(generic.FormView):
    template_name = 'form.html'
    form_class = DetailsForm
    success_url = reverse_lazy("success")

    def get_form_kwargs(self):
        return super().get_form_kwargs()

ListView

class django.views.generic.ListView

Представление отображает страницу списка объектов

Наследник:

Контекст:

  • object_list - список объектов указанной модели
  • paginator - объект для пагинации
class PostListView(ListView):
    queryset = Post.objects.all()
    context_object_name = 'posts'
    paginate_by = 3
    template_name = 'list.html'
class PostListView(ListView):
    model = Post
    template_name = 'list.html'

    def get_queryset(self):
        qs = super().get_queryset()
        return qs.filter(...)
model

Модель для представления

paginate_by

Количесвто записей на странице

template_name

Путь к файлу шаблона, по умолчанию app_name/model_name_list.html

template_name_suffix

Суффикс для файла шаблона, по умолчанию _list

get_queryset()

Возвращает объект запросы БД

MonthArchiveView

class django.views.generic.MonthArchiveView

Представление списка записей за указанный год и месяц

Наследник:

class SomeMonthArchiveView(MonthArchiveView):

    model = SomeModel
    date_field = 'created'
    make_object_list = True
template_name_suffix

Суфикс для шаблона, по умолчанию ‘_archive_month’

RedirectView

class django.views.generic.RedirectView

TemplateView

class django.views.generic.TemplateView

Представление возвращащает ответ, в виде отрендеренного шаблона.

Наследник:

class AboutView(TemplateView):

    template_name = 'about.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data()

        # self.request
        # self.args
        # self.kwargs

        return context
args

Неименованные параметры обработки запроса

kwargs

Именованные параметры обработки запроса

request

Запрос

template_name

Путь к шаблону

TodayArchiveView

class django.views.generic.TodayArchiveView

Представление для списка записей для текущей даты

Наследник:

template_name_suffix

Суфикс для шаблона, по умолчанию “_archive_day”

UpdateView

class django.views.generic.UpdateView

Представление для обновления объекта модели

fields

Список полей модели, которые будут на форме

initial

Словарь начальных данных для формы

success_url

Адрес, на который будет пепрезод после успешного обновления

template_name_suffix

Суффикс для шаблона, по умолчанию ‘_form’

WeekArchiveView

class django.views.generic.WeekArchiveView

YearArchiveView

class django.views.generic.YearArchiveView

Представление выводит список записей, относящихся к указанному году.

Наследник:

class SomeYearArchiveView(YearArchiveView):

    model = SomeModel
    date_field = 'created'
    make_object_list = True
template_name_suffix

Суффикс для поиска шаблонов, по умолчанию ‘_archive_year’

Базовые классы

BaseArchiveIndexView

class django.views.generic.dates.BaseArchiveIndexView

Базовый класс для архивных записей

context_object_name

Название переменной в контексте, в котором будут содержаться записи

BaseCreateView

class django.views.generic.edit.BaseCreateView

Базовое представление для создания элемента модели

Наследник:

BaseDateListView

class django.views.generic.dates.BaseDateListView

Базовый класс для списка записей с учетом дат

В контекте положит:

Наследник:

BaseDayArchiveView

class django.views.generic.dates.BaseDayArchiveView

Базовый класс для представлений по дням

В контекст положит:

  • day - текущая дата
  • previous_day - предыдущая дата
  • next_day - следующая дата
  • previous_month - предыдущий месяц
  • next_month - следующий месяц

Наследник:

BaseDetailView

class django.views.generic.detail.BaseDetailView

Базовый класс для представления объекта

В контекст положит:

  • object - объект

Наследник:

object

Объект для представления

BaseListView

class django.views.generic.list.BaseListView

Базовый класс для представления списка объектов

Наследник:

BaseMonthArchiveView

class django.views.generic.dates.BaseMonthArchiveView

Базовый класс для представления списка объектов за указанный месяц

В контекст положит:

  • month - текущий месяц
  • next_month - следующий месяц
  • previous_month - предыдущий месяц

Наследник:

BaseTodayArchiveView

class django.views.generic.dates.BaseTodayArchiveView

Базовый клас для представления списка элементов за сегодня

Наследник:

BaseYearArchiveView

class django.views.generic.dates.BaseYearArchiveView

Базовый класс для представлении списка элементов по годам

В контекст положит:

  • date_list - список дат
  • year - указанный год
  • next_year - следующий год
  • previous_year - прошлый год

Наследник:

date_list_period

‘month’

make_object_list

False

View

class django.views.generic.View

Базовый класс для всех предсавлений

Поддерживает методы запроса (get, post, put, patch, delete, head, options, trace) для обработки запроса, т.е. можно просто объявить метод класса по однойменному методу, который будет соответсвенно обрабатывать метод запроса.

as_view(**initkwargs)

Возвращает экземпляр класса представления, обработчико запросов

Миксины

ContextMixin

class django.views.generic.base.ContextMixin

Миксин, для поддержки контекста в представлениях

get_context_data(**kwargs)

Возвращает контекст для представления

DateMixin

class django.views.generic.dates.DateMixin
allow_future

Булево, использовать и будущие записи

date_field

Имя поля модели, на основе которого будет строиться сортировка

model

Модель, по которому будут фильтровать записи

DayMixin

class django.views.generic.dates.DayMixin

Миксин для поддержки дня

day_format

Формат для даты, по умолчанию ‘%d’

day

День

FormMixin

class django.views.generic.edit.FormMixin

Миксин для создания форм

initial

Начальные данные формы

form_class

Класс формы

success_url

Урл, на которой переходим в результате успешного сохранения

prefix
get_form_kwargs()

Возвращает параметры для формы

ModelFormMixin

class django.views.generic.edit.ModelFormMixin

Миксин создает форму по модели

Наследник:

fields

Поля модели, которые будут на форме

MonthMixin

class django.views.generic.dates.MonthMixin

Миксин для поддержки фильтрации по месяцу

month_format

Формат для месяца, по умолчанию ‘%b’

month

Месяц

MultipleObjectMixin

class django.views.generic.list.MultipleObjectMixin

Миксин для поддержки просмотра множества объектов, имеет пагинацию.

В контексте положит:

  • paginator - объект,пагинатор
  • page_obj - объект, страница
  • is_paginated - булево, имеется ли более 1 страницы
  • object_list - queryset элементов представления
allow_empty

Булево, пустая страница

queryset

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

Не обязательный параметр, можно просто задать модель.

model

Модель, с объектами которого производится манипуляция.

Не обязательный параметр, можно просто задать QuerySet.

paginate_by

Количесвто элементов на странице

paginate_orphans

Количество элементов на последней странице

context_object_name

Название объекта в контексте, по умолчанию ‘object_list’

paginator_class

Класс, реализующий пагинацию, по умолчанию django.core.paginator.Paginator

page_kwarg

Название переменной в контексте, для страницы, по умолчанию ‘page’

ordering

Сортировка элементов представления

MultipleObjectTemplateResponseMixin

class django.views.generic.list.MultipleObjectTemplateResponseMixin

Миксин позволяет брать в качестве шаблона шаблон, по пути app_name/model_name_list.html

Наследник django.views.generic.base.TemplateResponseMixin

template_name_suffix

Суффикс для шаблона списка, по умолчанию ‘_list’

ProcessFormView

class django.views.generic.edit.ProcessFormView

Помещает в контекст форму

Наследник:

SingleObjectMixin

class django.views.generic.detail.SingleObjectMixin

Миксин для представления одного объекта

model

Модель, откуда будет браться объект, или можно задать просто кверисет

queryset

QuerySet для выборки объекта, можно просто задать модель

slug_field

Название слаг поля, по которому можно получить объект из БД, по умолчанию ‘slug’

context_object_name

Название переменной в контексте, по умолчанию ‘object’

slug_url_kwarg

Название переменной в запросе, которая содержит слаг поле, по умолчанию ‘slug’

pk_url_kwarg

Название переменной в запросе, которая содержит первичный ключ объекта, по умолчанию ‘pk’

query_pk_and_slug

Использовать слаг филд для получения объекта

SingleObjectTemplateResponseMixin

class django.views.generic.detail.SingleObjectTemplateResponseMixin

Миксин позволяет брать в качестве шаблона шаблон, по пути app_name/model_name_detail.html, из самого объекта

Наследник django.views.generic.base.TemplateResponseMixin

model

Модель, для которой обрабатывается представление, шаблон будет браться по пути app_name/model_name_detail.html

Не обязательный параметр

template_name_field

Название атрибута в объекте, который отображает представление, в котором указан путь к шаблону

Не обязательный параметр

template_name_suffix

Суффикс для шаблона списка, по умолчанию ‘_detail’

TemplateResponseMixin

class django.views.generic.base.TemplateResponseMixin

Миксин, возвращает отрендеренный шаблон для запроса

template_name

Путь к шаблону

template_engine

Шаблонизатор, по умолчанию дефолтный

response_class

Класс ответа, по умолчанию django.template.response.TemplateResponse

content_type
render_to_response(context, **response_kwargs)

Возвращает ответ на запрос

YearMixin

class django.views.generic.dates.YearMixin

Миксин для представлении списка по годам

year_format

Строка, формат по которому будет распозноваться полученное значение года.

По умолчанию ‘%Y’

year

Год в виде строки