- 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