- Django – библиотека самого фреймворка Django
- psycopg2-binary – модуль для базы данных PostgreSQL
- djangorestframework - позволяет сериализовать данные из Django ORM через REST API
- Pillow - библиотека для работы с изображениями
- django-markupfield – позволяет создать поле в модели, в котором можно использовать дополнительные виды разметки
- environs[django] - библиотека для управления переменными окружения, парсинга урлов
# myproject/settings.py
from environs import Env
env = Env()
env.read_env()
# Override in .env for local development
DEBUG = env.bool("DEBUG", default=False)
# SECRET_KEY is required
SECRET_KEY = env.str("SECRET_KEY")
# Parse database URLs, e.g. "postgres://localhost:5432/mydb"
DATABASES = {"default": env.dj_db_url("DATABASE_URL")}
# Parse email URLs, e.g. "smtp://"
email = env.dj_email_url("EMAIL_URL", default="smtp://")
- rollbar – позволяет использовать трекер кода Rollbar https://rollbar.com
- django-mptt - модуль для работы с древовидными структурами (в данном проекте модель Deck)
- django-taggit – используется для добавления тегов в модель
- django-taggit-helpers - используется для помощи с работой тегов. Для данного проекта используется фильтрация по тегам
- more-itertools - инструменты для работы с итерируемыми объектами, здесь используется функция flatten которая уменьшает вложенность.
- django-import-export – используется для экспорта и импорта данных из админки
- gTTS - создает токен для gTTS
- sqlalchemy - ORM для работы с базой данных, используется для экспорта карточек в приложение
- beautifulsoup4[lxml] - парсер HTML и XML
- tqdm - для настройки прогресс баров
B1. Для каждой модели в models.py приведите пример наполнения БД. Оформите это в виде JSON/YAML, например:
Deck:
name: API веб-сервисов
slug: api_web_servisov
parent: Уроки Девмана
Sleng:
word_with_synonyms: template sample
footnote_explanation: a thing that is used as a model for producing other similar examples
tags: template
BaseCard:
guid: 12345678912345678913456789123456789
deck: id_Deck
lesson: id_Lesson
solution_enhancement_template: id_SolutionEnhancementTemplate]
tags: api
moderation_status: Одобрена
moderator_notes: Добавить пример использования
published: True
created_by: Mike Forest
created_at: 15.07.2022 10:00
BasicCard:
front: Какой тип контента просит клиент?
GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5)
Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
answer: text/html
explanation: Клиент просит HTML разметку
EnglishCard:
word: accidental
word_translation: случайный
phrase: That was purely accidental
phrase_translation: Это было совершенно случайно
article_link: https://article_link.com
acting_voice: accidental.mp3
slengs: id_Sleng
Issue:
card: id_BaseCard
description: Не отображается адрес
created_at: 15.07.2022 10:00
author: Mike Forest
Используется для создания древовидных моделей. В данном проекте модель Deck - это родитель.
Вводит дополнительную информация о модели, не являющуюся полем. В проекте используется сортировка по вложенности
Указанные в скобках поля должны быть уникальными при совместном рассмотрении. Чтобы исключить дублирование колод.
B5. Как под капотом устроено поле MarkupField? Что лежит в базе данных? Как и когда происходит рендер markdown?
MarkupField - это текстовое поле, как CharField, но со связанным типом разметки. При сохранении объекта в БД происходит рендер markdown
B6. Как модель BaseCard связана с BasicCard и EnglishCard? Сколько таблиц в БД создаётся и как они связаны между собой?
BaseCard родительская модель, а BasicCard и EnglishCard дочерние.
В БД создается три таблицы для каждой модели. BasicCard и EnglishCard наследуют все поля BaseCard и добавляют свои.
Чтобы не дублировать поля в дочерних моделях, а прописать один раз в родительской. А так же, для вывода всех моделей одновременно.
Потому, что была нужна еще одна таблица для отображения в админке. Можно вывести все карточки сразу в одном месте.
.returncode это атрибут объекта Popen, статус выхода из дочернего процесса. Пока он возвращает 0, процесс проходит успешно, при возврате значения, отличного от 0, поднимется исключение ValueError.
Рендерит markdown-разметку в HTML c помощью js скрипта
Для ускорения процесса рендеринга, рендерится сразу много карточек
Создает свой собственный фильтр для фильтрации карточек по именам тэгов в административной панели
Создает функционал для импорта/экпорта данных для модели BaseCard
Преобразовывают данные модели в более простые, для возможности экспорта или возвращают данных конкретных полей.
dehydrate_tags - возвращает список тегов карточки через запятую
dehydrate_card_type - возвращает тип карточки
dehydrate_basiccard_front - возвращает исходный код поля 'Фронтальная сторона' или пустую строку
dehydrate_basiccard_explanation - возвращает исходный код поля 'Объяснение ответа' или пустую строку
Вызывается при импорте и позволяет импортировать файл с необходимыми полями и записать их в БД.
Заполняет поля front, answer, explanation, tags, deck, lesson, solution_enhancement_template.
Позволяет импортировать файл с данными о колоде, и записать их в БД
Предназначен для уравления древовидным списком карточек путем перетаскивания узлов дерева
Возвращает список тэгов обычной или английской карточки или возвращат пустой список, при их отсутствии
Создает поле выбора типа карточки - обычная карточка или английская карточка.
Используется для создания фильтрации в административной панели древовидной структуры по экземплярам модели со всеми её потомками.
Нужен для подключения css файлов
Возвращает содержимое обычной или английской карточки в html разметке
Возвращает название урока lesson_title, решение по улучшению шаблона enh_action и имена тэгов tag_names в html разметке
Метод перенаправляет обратно на страницу добавления карточки, при отсутствии изменеия карточки и без сохранения ее в БД.
Метод определяет url для перенапраления пользователя в зависимости от того, объект какой модели был создан формой: обычная или английская карточка.
Метод определяет url для перенапраления пользователя в зависимости от того, объект какой модели нужно редактировать: обычная или английская карточка
Метод проверяет наличие прав у пользователя (объект создан пользователем или у пользователя есть права на редактирование любых объектов данного типа) то, при наличии, позволяет удалить дочерние объекы модели BaseCard при каскадном удалении
Cловарь BaseForm.cleaned_data
Заполняет поле created_by, если оно пустое
Переопределяет 'widget', который отвечает за настройку отображения поля в форме для полей класса MarkupField
Добавляет к запросу список тегов
- Проверяет, заполнено ли поле
phraseилиphrase_translation, и если да, то добавляетhelp_text(берется изANKI_MARKDOWN_HELP_TEXT) - С помощью метода
clean, проводится проверка на прохождение карточки модерации - Определяет настройки виджетов для редактирования полей
def get_explanation_preview(self, obj):
return get_anki_field_preview(str(obj.explanation))
get_explanation_preview.short_description = BasicCard._meta.get_field('explanation').verbose_nameМетод get_field(field_name) возвращает объект указанного поля модели. В данном случае извлекается значение атрибута verbose_name для заданного поля модели.
D23. Зачем BasicCardAdmin и EnglishCardAdmin понадобилось переопределять методы response_post_save_add, response_post_save_change и changelist_view?
Методы определяют url для перенаплавления пользователя после сохранения созданной или измененной карточки
При сохранении карточки сервису Google Text to Speech передаётся фраза в текстовом формате на английском языке. Полученный результат озвучки сохраняется в mp3-файл. Если уже имеется такой файл, то происходит перезапись.
В случае возникновения ошибки создания объекта, направляет отчет в rollbar
В поле footnote_explanation добавляет help_text (берется из ANKI_MARKDOWN_HELP_TEXT)
Это шаблон, который формирует страницу для обратной связи с пользователем. С помощью нее можно сообщить об ошибке, возникшей в карточке. Содержит подсказку о возникших ошибках в виде вопроса "Что не так с картой?" и выводом информацию об этих ошибках.
Это шаблон, который формирует страницу, на которой выводится сообщение: "Теперь мы знаем о проблеме. Спасибо!" после успешной отправки сообщения об ошибке, созданной в форме feedback_form.html. Так же имеентся предложение о создании еще одного ообщения.
В данном файле лежат css-стили для отображения предпросмотра карточки при экспорте
Это шаблон страницы, на которой привдены примеры с элементами редактора карточки
В данном файле лежат css-стили для оформления полей для страницы админ-панели для модели BaseCard. Он используется в файле test_anki_card.html