Компоненты представляют собой общие назначения, хотя эти три компонента могут быть реализованы двумя способами:
1. Http Response. Функция, которая получает на вход запрос и основные параметры и возвращает объект Http Response.
2. Класс-наследник View (или его подклассов). В результате исследования получается метод as_view.
Выбор между подходами, формируется исходя из сложности: функциональные классы подходят для малых задач, а View-классы - для массивных решений. Для выполнения View Analysis View, Home View и Forecast View используются классы, а для RESTAPI используются функции. AnalysisView отображен в листинге 4.
Листинг 4. Анализ Просмотр
Класс AnalysisView (LoginRequiredMixin, TemplateView):
template_name = 'analysis.html'
login_url = '/ счета / Войти /'
redirect_field_name = 'redirect_to'
defget_context_data (self, ** kwargs):
context = super (). get_context_data (** kwargs)
context ['category_picker'] = form = CategoryPicker ()
dateframe = self.request.GET.get ("dateframe", нет)
если дата == Нет:
dateframe = "день"
аналитик = аналитик (дата)
category = self.request.GET.get ("category", нет)
печать (категория)
есликатегория == Нет:
category = Category.objects.all (). first ()
еще:
category = Category.objects.get (id = категория)
data = analyst.get_top_products (категория)
context ['abc_table'] = analyst.ABC_analysis ()
context ["trend_chart"] = charts.trends_chart (данные, "Тенденции в категории: \ '" + category.name + "'", "", '', "chart-1-1")
data = analyst.get_antitop_products (категория)
context ["antitrend_chart"] = charts.trends_chart (данные, "Анти-тренды в категории: \ '" + category.name + "'", "", '', "chart-2-1")
контекст ["преобразование"] = analyst.get_conversion ()
context ["avg_order"] = analyst.get_average_order ()
возврат контекста
Класс Анализ представляет собой наследником класса templateview, который позволяет указать образец документа. Разработчик предлагает метод get_context_data, который возвращает словарь. При получении запроса этот класс сам возвращается в шаблон контекста.
ВPythonвозможно множественное наследование. В других языках это запрещено, т.к. неверное использование этого механизма может привести к ошибочным последствиям. В Djangoнаследовать можно только один класс-, View, но дополнительная функциональность добавляется с помощью Mixin. В анализеviewбыл использован Mixin.Для входа в систему требуетсяMixin.Доступ к пользователям не может быть выполнен в системе. Указывается login_url, URLк странице входа, а такжеredirect_to_field. Поэтому сохраняютсяURL-адреса, позволяющие пользователю получить доступ к странице логина, после входа в систему.
Методget_context_data (self, * args, ** kwargs) — это метод, который возвращает контекст, словарь данных для представления. К ним относятся значения не только видов, но и классов, которые описывают графики и формы.
На листинге 6 показан пример View на основе функции
Листинг 6.
@login_required (login_url = '/ счета / Войти')
@csrf_exempt
@renderer_classes ((JSONRenderer,))
defproduct_list (запрос):
«»»
Список всех продуктов
«»»
ifrequest.method == 'GET':
products = Product.objects.all ()
сериализатор = ProductSerializer (продуктов, много = True)
вернуть JsonResponse (serializer.data, safe = False)
Как видно из листинга, функция product_list (запрос) обрабатывает запрос request и возвращает в кейс типа JsonResponse. Объект запроса сохраняет в себе информацию о запросе, об HTTP-методе запроса (request.Method).
Эта функция обрабатывает только метод GET. Когда получен GET Запрос, функция достает из базы данных все данные о продуктах и возвращает их в виде JSON-файла, который получился после применения Product Serializer, сериализатора для объектов класса Product.
Содержание файла View.ru показано в приложении С.
Функции для работы с данными. Методы моделей.
Для оперативной работы с моделями были включены методы, которые отвечают за получение информации. Это хорошая практика при работе c Django. Перечень функций для работы с базами данных:
· Категория (сategory)
o get_top_products– получить сортированный массив из topsize самых лучших товаров заказанный dateframe («день», «месяц», «год»).
o get_antitop_products (self, topsize, dateframe) – получить сортированный массив из topsize самых плохоп родаваемых товаров заказанный date_frame.
· Товар (Product)
o get_revenue (self, count) –вернуть стоимостьcountэкземпляров продукта.
o is_category (self, category) - предикат «экземпляр продукта относится к категории категорий»
o get_total_for_day (self, dt) - вернуть общий доход от продаж продукта за день dt.
· Order
o recalculate_total (self) - пересчитать стоимость покупки;
o get_orders(dateframe) –вернуть записи Order за указанный dateframe (‘day’, ‘month’, ‘year’)
o
· Products Orders
o recalculate_total (self) –пересчитать значение total (доход от покупки товарной позиции в чеке)
o get_category_total (category) –возвращает доход категории category заказанные временные рамки.
o get_time_series (product, full = False) –возвращает временной ряд продажа продукта указанные временные рамки dateframe. Если заполнено = Истина, то возвращается в текущее время.