Руководство Разработчика - ksusonic/Django-editor GitHub Wiki

Руководство разработчика к графическому текстовому редактору

Технические требования

64-битная операционная система Windows, на которую возможна установка интерпретатора Python 3.7 (​https://www.python.org/downloads/)

Версии Библиотек

Данное приложение использует небольшой набор популярных библиотек питона. Ниже приведена таблица, которая описывает использованную версию каждой такой библиотеки (Табл. 1).

Библиотека Версия
Django 3.0.4
sys 3.7.1
os 3.2
json 19.2
sqlparse 0.3.1
Requests 2.23.0
urllib3 1.25.9
tkinter -

Табл. 1. Версии библиотек.

Архитектура Приложения

Данное приложение состоит из интерфейса, основанного на фреймворке Django в каталоге Work/Library и дополнительных модулей в каталоге Work/Scripts​. Файл запуска, находящийся в корневом каталоге Work ​- мanage.py содержит проверяющий конфигурацию системы и запускающий код программы. Этот файл вынесен отдельно от всех скриптов, для цели сохранения оригинальной структуры, заданной Django, которая автоматически создается при создании проекта на этом фреймворке. Также имеется скрипт start.py, выполняющий предыдущую команду, а также запускающий браузер по умолчанию в вашей системе с адресом локального сервера.

Приложение использует технологию WYSIWYG (от англ. What You See Is What You Get, «что видишь, то и получишь») для динамической отрисовки текста в форматированном виде (с применением параметров шрифта). В данном проекте было принято решение использовать библиотеку django_summernote. Она создана специально для фреймворка Django, и на 78% состоит из языка JavaScript, так как она преобразует видимый пользователем в браузере текст, а для этого используются скрипты, которые читаются браузером.

Также необходимо отметить, как работает приложение.

Примечание: далее речь будет о каталоге Work/Library .

Скрипт manage.py запускает оболочку Django в режиме сервера, находит заданную разработчиком ссылку на файл с настройками settings.py через функцию os.environ.setdefault(…) , одновременно проверяя наличие ошибок структуры.

Далее читается конфигурационный файл settings.py, где находится файл с информацией о URL-привязке. Этот файл, urls.py, считывается, и Django определяет какая страница должна открываться при введенном адресе в браузере. Конкретно в данном проекте, по умолчанию открывается страница с окном редактора при адресе http://127.0.0.1:8000/ - этот адрес в дальнейшем будет называться «начальная страница».

Смысл этого файла в том, что он сопоставляет, какие скрипты должны выполняться при введенном URL. Скрипты берутся из файла views.py который, как понятно из названия, отвечает за визуальную, видимую пользователем часть. На примере этого проекта – при открытии начальной станицы, из views.py вызывается функция index(request). Эта функция, render(request, ‘index.html’), возвращает готовую страницу, отображаемую в браузере. Файл index.html — это файл – шаблонизатор. Он состоит из взаимодополняющих друг друга кода HTML и Python. Причем структура строится на HTML, а Python составляет вставки нужных фрагментов, обрабатывающихся языком. Но такое решение было принято лишь в целях данного проекта. В Django есть технологии, позволяющие полностью рендерить страницу из языка Python.

После окончания работы пользователь может сохранить файл с помощью кнопки сохранения внизу, которая создает POST – запрос, за которым следит функция из файла views.py. Если запрашивается не просто страница (GET – запрос), а приходят какие-то данные, эта функция открывает Windows explorer и в привычном интерфейсе ожидает пока пользователь выберет директорию сохранения и название файла, или в конце концов отменит операцию. Ничего плохого не произойдет, введенные данные так и останутся на месте.

Функция открытия уже работает иначе. Одноименная кнопка уже вызывает отдельную функцию с другим URL – адресом, и аналогично с сохранением, вызывает проводник Windows.

Структура модулей

Данное приложение использует следующую систему модулей (Табл. 2).

Модуль Местонахождение Функция
Start.py Work Запуск приложения
manage.py Work Запускающий код, проверка структуры и ошибок
_init_.py Work/Library Пустой файл, служит для маркировки директории, как содержащая пакеты
asgi.py Work/Library Интерфейс асинхронного серверного шлюза (англ. Asynchronous Server Gateway Interface) – системный файл Django
settings.py Work/Library Главный конфигурационный файл проекта, не является функцией
urls.py Work/Library Отвечает за URL-привязку адреса в браузере и выполняемой функции из views.py
views.py Work/Library Отрисовывает визуальную часть в браузере, возвращая ф. render(…) с файлом гипертекстовой разметки, а так же содержит функции сохранения и загрузки.
wsgi.py Work/Library (англ. Web Server Gateway Interface) - cтандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером
index.html Work/Graphics Шаблон визуальной части редактора, который обрабатывается Django
db.sqlite3 Work/Data Системная база данных Django

Табл. 2. Модули приложения.

Структура Каталогов

Данное приложение использует следующую систему каталогов (Табл. 3).

Первый уровень Второй уровень Объяснение
Work Oсновной каталог
Data Содержит базу данных
Graphics Содержит шаблоны HTML
Library Содержит библиотеку стандартных функций, файлов Django
Notes Содержит документацию
Output Содержит копии текстовых отчетов, сюда можно сохранять файлы из редактора
Scripts/django_summernote Содержит визуализатор окна печати
Scripts/exploreropen Содержит функции открытия и сохранения файла

Табл. 3. Каталоги приложения

Листинг Скрипта

Ниже приведён список функций и docstrings каждого модуля (Табл. 4).

Модуль Функции с Докстрингами
manage.py main Цель: запуск приложения Вход: runserver Выход: execute_from_command_line(sys.argv) os.environ.setdefault Цель: запуск приложения Вход: 'DJANGO_SETTINGS_MODULE', 'Library.settings' Выход: определение директории с настройками
views.py index Цель: рендер исходной страницы Вход: request Выход: render(request, ‘index.html’, {‘form’ : form}) form Цель: сохранение текста Вход: dir Выход: request load Цель: открытие файла Вход: request Выход: index (request, text)
asgi.py Цель: инициализация интерфейса страниц Django Выход: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Library.settings')
settings.py Цель: файл с конфигурацией всего проекта (далее будет подробно описан)
urls.py Цель: сопоставление адреса в браузере с функцией в файле views.py Вход: URL адрес Выход: в зависимости от URL: index или load из views.py
wsgi.py Цель: Файл настройки Django Выход: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangotxteditor.settings')
fileopen_box fileopenbox Цель: открытие файла через проводник, используя tkinter Вход: msg, title, filetypes, multiplie Выход: графическое окно
filesave_box filesavebox Цель: сохранение файла через проводник, используя tkinter Вход: msg, title, default, filetypes Выход: графическое окно

Табл. 4. Листинг Скрипта

Параметры файла settings.py

BASE_DIR Директория папки с проектом
SECRET_KEY Ключ для запуска проекта на публичном сервере
DEBUG Отображение ошибок
INSTALLED_APPS Список установленных наборов скриптов проекта
ROOT_URLCONF Указывает корневой файл URL – привязки
DATABASES Указывает базу данных используемой Django, а также ее движок
LANGUAGE_CODE Глобальный язык сервера
TIME_ZONE Часовой пояс
STATIC_URL URL – привязка статических файлов
SUMMERNOTE_THEME Конфигурация дизайна редактора
SUMMERNOTE_CONFIG Конфигурация окна с редактором: width – ширина окна (в пикселях) height– высота окна (в пикселях) lang – язык текста иконок toolbar – элементы в меню сверху