tigleonid / test_repo

0 stars 0 forks source link

@

Локальный запуск

Убедиться, что установлены все зависимости:

pip install -r requirements.txt

Запуск локального сервера:

python manage.py runserver

Создание администратора:

python manage.py createsuperuser --email admin@mail.ru --skip-checks

(дальше потребуется ввести для него пароль)

Markdown

Markdown — мощный простой человекочитаемый формат текстовой разметки (этот файл написан именно в нём), который легко переводится в любой другой текст (например, есть утилита-шверцарский нож конвертации pandoc, переводит любой текстовый формат в любой (от fb2 до LaTex) ). Нам здесь нужно во многих местах давать возможность делать выделения, ссылки и так далее — я очень не хотел изобретать велосипед, и захотел его здесь использовать. Важно отображать математику — для нее мы используем mathjax — к сожалению, он слегка отличается от классического latex, но позволяет генерировать картинки прямо у пользователя на компьютере, а не хранить их на сервере/обращаться к "левым" сайтам.

В папке extra/courses есть самописный скрипт (bat, но он должен также работать на linux, так как он не использует никаких windows-команд — правда, подразумевает, что в path лежат pandoc и python), который может сконвертировать html с math-блоками в нужный нам markdown. В первую очередь — перевести материалы Евгения Евгениевича (алгебра). Кроме "засасывания" в pandoc он делает небольшие замены математики, чтобы получить mathjax, близкий к исходному tex. Он неидеален, над ним еще повозиться надо, но достаточно хорош.

Структура проекта

Приложения

Регистрация у нас лежит в отдельном приложении — accounts/. Регистрацию очень важно случайно не испортить во время разработки, и логика там не связана с основным сайтом.

Основной код сайта лежит в main/.

Django-структура приложения

В django логика состоит из следующих основных компонент, каждая из которых лежит в отдельном файле/папке:

Основное:

"Мелкое":

Мы также используем папку other, чтобы хранить прочую логику (например, сейчас в ней лежит файл markdown.py, с помощью которого можно генерировать html-код элементов из markdown).

Папки&файлы в корне проекта

Папки:

Файлы:

Миграции

Со временем появляется больше данных (новые параметры пользователи, новые записи и так далее). Все эти данные хранятся в отдельной базе, и, чтобы все работало и запускалось, после каждого изменения в структуре хранимых данных нужно эти изменения применить к базе:

python manage.py makemigrations

…создаст питоновские файлы с инструкциями, какие поля добавлять, а

python manage.py migrate

…попробует применить эти изменения к базе.

Иногда это делается автоматически, но очень часто случаются осложнения, например — если вы создали пользователю обязательное поле "номер телефона", но у вас в базе уже есть десять пользователей. Django не знает, откуда для них достать телефоны, и попросит значения по умолчанию (если не указано default в модели номера телефона).

Иногда начинают сыпаться конфликты, их нужно пытаться решать по обстоятельствам. Часто это просто ошибки в коде, нужно изучать и исправлять. Если возникли непонятные конфликты, которые никак не получается починить, можно попробовать удалить все файлы из main/migrations и сгенерировать их заново:

python manage.py makemigrations main

И применить их через migrate.

Средство для крайнего случая, которое почти гарантированно сработает — удалить/очистить базу (локально — файл db.sqllite, удаленно мы такое еще не пробовали), удалить миграции, как описано выше, и сгенерировать всю базу данных заново. ВАЖНО: при этом теряются все данные, это недопустимо, если этим пользуются реальные люди (только для локальных/если сервер пустой). Перед удалением настоятельно рекомендуется закоммитить/stash-ить базу, чтобы избежать потери важных данных.

На сервере мы еще ни разу не применяли миграции, так что могут возникнуть неочевидные осложнения.

Сервер

<Это должны написать Лёня/Павел Андреевич, я без понятия, как и что там происходит>

Советы

Прочее

В БД есть пользователи:

Студент 1:

email: user@mail.ru password: hardpassword

Студент 2:

email: reciever@mail.ru password: hardpassword

Администратор:

email: admin@mail.ru password: 123

Администратор для удаленного сервера:

email: superuser@mail.ru password: 123456