https://backend.radif.ru/ -
Backend
- серверhttps://backend.radif.ru/swagger/ -
OpenAPI
Swagger
https://backend.radif.ru/redoc/ -
OpenAPI
ReDoc
https://backend.radif.ru/api/ -
Django REST API
https://backend.radif.ru/graphql/ -
GraphiQL
https://backend.radif.ru/administration/ - Админка
https://backend.radif.ru/api/token/ - Генерация токена
https://backend.radif.ru/api/token/refresh/ - Обновить токен
https://backend.radif.ru/swagger.json -
REST API
вJson
https://backend.radif.ru/swagger.yaml -
REST API
вYAML
https://frontend.radif.ru/ -
Fronted
- клиент
Django REST framework. React. JWT. OpenAPI. Swagger. ReDoc. GraphQL. AsyncIO. Aiohttp. Contextvars. Cookies. Docker Compose. Gunicorn. Nginx. Linux. VPS-сервер и т.д.
В проекте нет упора на вёрстку или стили - при желании делаю
Pixel Perfect
под любой дизайн, работаю спрепроцессорами
,переменными
,миксинами
,расширениями
для стилей и т.д...
Главное - освоение новых технологий, функциональность, производительность, обеспечение безопасности, целостности данных, оптимизация запросов к БД, взаимодействие
Backend
(серверной части) иFrontend
(клиентской части) и т.д.
django
(v. 3.2.9) -Django framework
djangorestframework
(v. 3.12.4) -Django REST framework
markdown
(v. 3.3.4) - Язык разметки
django-filter
(v. 21.1) - Библиотека для фильтрации запросов + визуализация в браузерномAPI
django-cors-Headers
(v. 3.10.0) - Настройка политикиCORS
. Работа с заголовками для доступаReact
кDjango
djangorestframework-camel-case
(v. 1.2.0) - Визуализация в верблюжий стиль для отображения JSON и браузерногоAPI
. И наоборот в змеиный стиль для питона
djangorestframework-simplejwt
(v. 5.0.0), в него входит пакетPyJWT
(v. 2.3.0) - БиблиотекаJSON Web Token
. Современное средство передачи данных для аутентификации в клиент-серверных приложениях, посредствомJSON
. Токены создаются сервером, подписываются секретным ключом и передаются клиенту, который в дальнейшем использует данный токен для подтверждения своей личности.
mixer
(v. 7.2.0), тянет за собойFaker
(v. 9.8.2) и другие пакеты, подробнее вrequiremets.txt
. Mixer - удобная библиотека для генерации данных для тестов. Сам определяет типы полей модели и заполняет их соответствующим типом случайных данных. Так же определяет все связанные модели и создаёт соответствующие объекты со случайными данными. Можно выбирать дефолтные данные для нужных полей модели и связанных моделей. Поддерживает разные фреймворки.
requests
(v. 2.26.0) - Библиотека для удобного составленияHTTP
-запросов. Тянет за собой ещё несколько библиотек, подробнее вrequiremets.txt
.
drf-yasg
(v. 1.20.0), тянет за собойJinja2
(v. 3.0.3) и множество, с десяток других библиотек, запушил вrequiremets.txt
.YASG
-Swagger
дляDjango REST Framework
. Обеспечивает согласованность данных междуFrontend
иBackend
. Инструменты для реализацииOpenAPI
. Автоматическая генерация документацииAPI
- которую можно, например, сразу отдать фронтендеру в видеHTML
- страницы, вjson
формате,yaml
и т.д. То есть разработчик клиентской части (без разницы - web, мобильного, десктопного и др. приложения на любом языке) может сразу начать писать согласованный с сервером код.
graphene-django
(v. 2.15.0), так же подтягиваютсяpromise
(v. 2.3),graphql-core
(v. 2.3.2) и другие библиотеки для работы с альтернативойREST
-GraphQL
наDjango
. Используется другая архитектура, язык и механизмы создания, отправки запросов к БД и т.д.
psycopg2-binary
(v. 2.9.2) - скомпиленный wheel-пакет с бинарниками. Адаптер базы данныхPostgreSQL
для языка программированияPython
. Его основными функциями является полная реализация спецификацииPython DB API 2.0
и безопасность потоков. Предназначен для сильно многопоточных приложений
gunicorn
(v. 20.1.0) -HTTP
-сервер с интерфейсом шлюза веб-сервераPython
(WSGI
).
asyncio
- встроенная библиотека для асинхронного программирования
aiohttp
(v. 3.8.1) - тянет за собойaiosignal
(v. 1.2.0),async-timeout
(v. 4.0.2),frozenlist
(v. 1.2.0),multidict
(v. 5.2.0),yarl
(v. 1.7.2),attrs
(v. 21.2.0). Библиотека aiohttp предоставляет асинхронныйHTTP
-клиент, построенный поверхasyncio
. Эта библиотека позволяет отправлять запросы последовательно, но не дожидаясь первого ответа, прежде чем отправлять новый.
contextvars
- встроенный модуль - предоставляетAPI
-интерфейсы для управления, хранения и доступа к локальному контексту состояния.
django-debug-toolbar
(v. 3.2.4) -Debug-toolbar
— Инструменты разработчика, набор панелей, появляющихся на странице в режиме отладки.
Pillow
(v.8.4.0) - библиотека для работы с изображениями - загрузка, изменение разрешений, расширений и т.д.
python:3.10-slim
Postgres:14.1-alpine
- Система, комплекс приложений и утилит для работыPostgreSQL
- свободная объектно-реляционная система управления базами данных (СУБД
).
nginx:1.21.4-alpine
- Система, комплекс приложений и утилит для работыNginx
- веб-сервер и почтовый прокси-сервер, работающий наUnix
-подобных операционных системах.
npx
- Режим одноразового запуска, пакет для запуска пакетов без установки в систему.
create-react-app
Создание/установка проекта наReact
(v. 17.0.2) +Babel
,Webpack
и другие полезные зависимости для комфортной работы.
axios
(v. 0.24.0) - Библиотека для браузеров и Node.js, HTTP-клиент.
react-router-dom
(v. 6.0.2) - Маршрутизация<BrowserRouter>
,<HashRouter>
и другие компоненты.
dateformat
(v. 5.0.2) - Преобразование даты.
universal-cookie
(v. 4.0.4) - УниверсальныеCookies
дляReact
и не только. Удобство использования.
bootstrap
(v. 5.1.3) - БиблиотекаBootstrap 5
-HTML
,CSS
-шаблоны,JavaScript
-расширения. Содержит@popperjs/core
(v. 2.10.2) - зависимость, механизм подсказок и всплывающих окон, подгружается черезnode_modules/bootstrap/dist/js/bootstrap.bundle.min.js
. Так же содержит другие зависимости, которые отображены в корнеbootstrap
, файлеpackage.json
.
SASS
- Метаязык на основе CSS, предназначенный для увеличения уровня абстракции CSS-кода и упрощения файлов каскадных таблиц стилей. Используются фишки препроцессора: переменные, расширения, примеси, функции для стилей и т.д.
Frontend. SPA. Точка входа https://frontend.radif.ru
У авторизованных пользователей появляются новые возможности. Личный кабинет. Можно создавать и удалять свои проекты, заметки, редактировать данные и т.д.
У администраторов полный доступ - можно удалять (кроме пользователей) и редактировать любые данные.
https://frontend.radif.ru -
Single Page Application
- Вход в приложение, подгрузка данных изbackend
-а, дальше перемещение по всем компонентам с помощью меню, без перезагрузки страницы. Если пользователь не авторизован для получения данных используется -GraphQL
. Если авторизован -Django REST
.https://frontend.radif.ru/users/ - Подгрузка компонента
Пользователи
, данные всех пользователей в табличном виде с возможностью перехода на конкретного пользователя, отображение дней рождения переформатированоhttps://frontend.radif.ru/users/3/ - Все данные пользователя (кроме системных и пароля) по
id
<3>
из БД наbackend
-е. Так же подгружаются все проекты и заметки пользователя ко всем проектам. У авторизованных есть возможность изменять все свои данные указанные при регистрации. Попасть на эту страницу так же можно по кнопкеЛК | <login>
(видна только авторизованным) в меню сверху. Появляются кнопки для добавления, изменения, удаления данных - при нажатии генерируются формы редактирования. Администратор может зайти к любому пользователю и изменить его данные или удалить его проекты и заметки.https://frontend.radif.ru/projects/ - Подгрузка компонента
Проекты
, данные всех проектов в табличном виде, возможность перехода к конкретному проекту или к пользователям работающими с конкретным проектом. Для авторизованных: возможность удалять свои проекты - появляется кнопкаDel
- рядом со своими проектами, у администратора - кнопкаDel
- рядом со всеми проектами.https://frontend.radif.ru/projects/3/ - Данные Проекта по
id
<3>
из БД наbackend
-е. + Отображаются имена/ссылки всех пользователей, кто работают с проектом. + Отображаются все заметки оставленные к проекту с данными чья это заметка и переформатированными датами создания/обновления. Данные собираются и фильтруются из разных источников, собранных вSPA
, но без повторных запросов к БД! Если этот проект принадлежит авторизованному пользователю он может его редактировать, а так же свои заметки, появляются кнопки для добавления, изменения, удаления данных. К проекту так же можно добавить (из сформированного списка) других зарегистрированных пользователей работающих с этим проектом. Заметки можно оставлять к любым проектам. При создании проекта пользователю назначается роль -владелец проекта
. Администратор может зайти в любой проект и изменить или удалить его, а так же оставленные к нему заметки.https://frontend.radif.ru/todos/ - Подгрузка компонента
Заметки
, данные всех заметок в табличном виде, возможность перехода к проекту, к которому оставлены конкретные заметки. Для авторизованных: возможность удалять свои заметки - появляется кнопкаDel
- рядом со своими заметками, у администратора - кнопкаDel
- рядом со всеми заметками.https://frontend.radif.ru/login/ - Компонент с формой, где происходит авторизация на стороне клиента. От сервера в ответ приходит токен
JWT
и сохраняется вCookies
, соответственно даже после перезагрузки приложения или браузера пользователь остаётся авторизованные пока не разлогинится или не истечёт срок действия токена. При любых последующих запросах токен, взятый изCookies
, прикладывается с префиксомBear_R@d1f
дляJWT
и другими данными к заголовкам. Пока пользователь залогинин в меню отображается логин пользователя с кнопкойВыйти
- то есть деавторизацииНажатие кнопки
Выйти
(видна авторизованным) - деавторизация на стороне клиента. Происходит разлогинивание, изCookies
удаляется токен и логинКнопка
ЛК | <login>
- личный кабинет, описана выше, как и поведение остальных кнопок.https://frontend.radif.ru/registration/ - Регистрация пользователя. Во время регистрации новому пользователю автоматически назначается роль -
разработчик
. Доступна только неавторизованным пользователям. На сервере настроено ограничение на возможность регистрации - только администраторы могут создавать другие аккаунты в авторизованном состоянии!https://frontend.radif.ru/asyncio-aiohttp/ - Асинхронное получение сгенерированных
Рыба-текстов
. Используются библиотекиAsyncIO
иAiohttp
. На сервере выполняется множество асинхронных запросов (отдельно за каждым абзацем), сюда приходит готовый массив данных. Данные всегда разные.https://frontend.radif.ru/upload-images/ - Работа с изображениями, загрузка на сервер, получение из сервера, удаление, изменение имени, конвертирование с новым разрешением - доступно авторизованным!
Backend. Точка входа https://backend.radif.ru Web-ресурсы
https://backend.radif.ru/administration/ - Админка
https://backend.radif.ru/swagger/ -
OpenAPI
- Универсальный интерфейс для пользователей (клиентов) по взаимодействию с сервисами (серверами). Не зависит от языков программирования. Подробнее ниже, в методахAPI
.https://backend.radif.ru/redoc/ -
OpenAPI
- Другое использование и отображение созданной спецификации. Подробнее ниже, в методахAPI
.
https://backend.radif.ru/graphql/ -
GraphiQL
- Хороший отладочный инструмент. Доступность включена только в режимеDEBUG
, позволяет проводить, тестировать запросы на языкеGraphQL
прямо в браузере в удобном интерфейсе с подсказками, историей, моими описаниями моделей и их полей и т.д.
Backend. Точка входа https://backend.radif.ru Методы API проекта, Endpoint-ы
Тут
GraphQL
используется в клиенте наReact
только для примера, для получения данных неавторизованным пользователем, после авторизация и все последующие запросы проходят черезendpoint
-ыDjango REST
с присоединением токенаJWT
в заголовках.
https://backend.radif.ru/graphql/ - все запросы к
API GraphQL
проходят через этот единыйEndpoint
.Как выглядят запросы со стороны клиента
GET
. Через параметры адреса. Запрос на языкеGraphQL
должен быть помещён в виде строки в параметрquery
. Пример простого запроса, через параметр адреса, на вывод некоторых данных:
/graphql/?query={allUsers {id username firstName lastName birthdate}}
-Endpoint
с параметромquery
POST
.JSON
. Через тело запроса. Запрос на языкеGraphQL
должен быть помещён в виде строки в тело запроса в поле объектаJSON
-query
. Пример простого запроса, через тело запроса, на вывод некоторых данных:
/graphql/
-Endpoint
{ "query": "{allUsers {id username firstName lastName birthdate}}" }
- ТелоПосмотреть включённые запросы, ограничения, мутации и т.д. можно в
backend/config/shema.py
Вся основная логика
API
бэкенда вDjango REST
.
https://backend.radif.ru/swagger/ -
HTML
- формат.Swagger
. То есть удобное, красиво и функционально оформленное отображение прямо в браузере. Встроены различные инструменты, тянет за собой мои описания полей моделей, методов, миксинов, классов в коде и др., показывает поддерживаемы типы, ограничения, можно работать с любыми запросами, получить консольные команды для запуска черезcurl
и т.д.https://backend.radif.ru/redoc/ -
HTML
- формат.ReDoc
. Так же удобный вид браузерной визуализации сгенерированной документацииAPI
. Но созданная спецификация используется и отображается по другому.https://backend.radif.ru/swagger.json -
JSON
- формат. Можно отдать для изучения разработчикам клиентской части, использовать для автоматизации в любомFrontend
-е, на любом языке.https://backend.radif.ru/swagger.yaml -
YAML
- формат
Включён контроль системы версий по заголовкам. Необходимо внутри заголовков, в
Headers
добавить полеAccept
и в нём указать, например:\application/json; version=2.0
- вместо 2.0 может быть любая другая версия, от этого будет зависеть какие данные придут в ответ. Так же в коде закомментены другие методы по контролю версий, например в зависимости от url-адресов или имени хоста.
О любых действиях - изменение, создание, удаление данных рассылаются оповещения по электронным адресам их владельцев. В данном случае все письма хранятся в папке tmp. Но если подключить домен, можно настроить рассылку с реального почтового адреса на реальные почтовые ящики - уже так делал.
https://backend.radif.ru/api/auth/login/ - Авторизация пользователя
https://backend.radif.ru/api/auth/logout/ - Деавторизация пользователя
https://backend.radif.ru/api/token/ - Получение Токена через
POST
запрос для авторизацииhttps://backend.radif.ru/api/token/refresh/ - Сброс / обновление токена
https://backend.radif.ru/api/visits/ -
GET
,HEAD
,OPTIONS
- Фиксация количества посещений всех точек входаBackend
-a, сюда же входят все запросы поAPI
от клиента, последняя дата посещения. Если пользователь авторизован фиксируется его идентификатор
- Администраторы (Джанговские и из моих групп зависимостей) могут всё
- Изменять данные может владелец данного аккаунта.
- Удалить аккаунт может владелец данного аккаунта.
- Создать аккаунт может любой - если не авторизован! Администратор, даже авторизованный, всегда может создавать новые аккаунты.
- Читать данные могут все. Но не все данные включены в сериализаторе
https://backend.radif.ru/api/users/ -
GET
,POST
,HEAD
,OPTIONS
- Вывод данных всех пользователей. Регистрация. В сериализаторе включена фильтрация по возрасту. Если меньше 18 лет, зарегистрироваться не получится. Пароль ввести/обновить можно, но прочитать нельзя. По запросу<
GET>
приходят множественные данные - все связанные объекты, а так же их вложенное множество объектов. Чтобы получить данные без вложенности есть другие методыAPI
, описанные ниже.https://backend.radif.ru/api/users/3/ -
GET
,PUT
,PATCH
,DELETE
,HEAD
,OPTIONS
- В зависимости от метода запроса - вывод данных, редактирование и т.д. пользователя по<id>
в БД, вместо<3>
подставитьid
Пользователя.
https://backend.radif.ru/api/users/3/login/ -
GET
,HEAD
,OPTIONS
- Вывод уникального логина пользователя поid
в БД, вместо<3>
подставитьid
Пользователяhttps://backend.radif.ru/api/users/3/fio/ -
GET
,HEAD
,OPTIONS
- Вывод фамилии, имени, отчества пользователя поid
в БД, вместо<3>
подставитьid
Пользователяhttps://backend.radif.ru/api/users/superusers/ -
GET
,HEAD
,OPTIONS
- Вывод данных всех суперпользователейhttps://backend.radif.ru/api/users/active -
GET
,HEAD
,OPTIONS
- Получить всех активных пользователей без вложенных объектовhttps://backend.radif.ru/api/users/inactive -
GET
,HEAD
,OPTIONS
- Получить всех неактивных пользователей без вложенных объектов
https://backend.radif.ru/api/users/?login=va -
GET
,POST
,HEAD
,OPTIONS
- Вывод данных пользователей отфильтрованных по части логина (фильтрация в БД username__contains), вместо<va>
подставляем часть (можно даже 1-2 буквы) уникального логина пользователя. Настроено вручную стандартными методамиhttps://backend.radif.ru/api/users/?first_name=Vasya&middle_name=Niko&last_name=Pe -
GET
,HEAD
,OPTIONS
- Вывод данных пользователей, отфильтрованных по части имени, части фамилии, части отчества вместо<Vasya>
подставляем часть имени, вместо<Pe>
часть фамилии, вместо<Niko>
часть отчества пользователей. Некоторые данные можно опускать или комбинировать, в том числе с другими методами фильтрации, как например по части логина выше. Настроено с помощью кастомногоdjango-filter
https://backend.radif.ru/api/users/?limit=2&offset=1 -
GET
,POST
,HEAD
,OPTIONS
- В поле<2>
указываем количество пользователей, чьи данные придут в ответе на запрос, в поле<1>
- смещение относительно первого пользователя. В ответ кроме пользователей приходят ссылки на смещение относительно страницы и другие данные
- Администраторы (Джанговские и из моих групп зависимостей) могут всё.
- Изменять данные могут пользователи, которые работают с проектом.
- Удалить проект могут пользователи, которые работают с проектом.
- Создать проект может любой пользователь, если авторизован.
- Читать данные могут все. Но не все данные включены в сериализаторе
https://backend.radif.ru/api/projects/ -
GET
,POST
,HEAD
,OPTIONS
- Список проектов, создание проекта. По запросуGET
приходят множественные данные - все связанные объекты, а так же их вложенное множество объектов. Чтобы получить данные без вложенности есть другие методыAPI
, описанные ниже.https://backend.radif.ru/api/projects/3/ -
GET
,PUT
,PATCH
,DELETE
,HEAD
,OPTIONS
- Вывод, редактирование, удаление проекта, вместо3
подставитьid
Проекта
https://backend.radif.ru/api/projects/active -
GET
,HEAD
,OPTIONS
- Получить все активные проекты без вложенных объектовhttps://backend.radif.ru/api/projects/inactive -
GET
,HEAD
,OPTIONS
- Получить все неактивные проекты без вложенных объектов
https://backend.radif.ru/api/projects/?name=лики -
GET
,POST
,HEAD
,OPTIONS
- Вывод данных проектов, отфильтрованных по части имени, вместо<лики>
подставляем часть имени проектов. Настроено с помощью кастомногоdjango-filter
https://backend.radif.ru/api/projects/?limit=2&offset=1/ -
GET
,POST
,HEAD
,OPTIONS
- В поле<2>
указываем количество проектов, данные которых придут в ответе на запрос, в поле<1>
- смещение относительно первого проекта. В ответ кроме проектов приходят ссылки на смещение относительно страницы и другие данные
- Администраторы (Джанговские и из моих групп зависимостей) могут всё.
- Изменять данные может создатель заметки.
- Удалить заметку может её создатель.
- Создать заметку может любой пользователь, если авторизован.
- Читать данные могут все. Но не все данные включены в сериализаторе
https://backend.radif.ru/api/todos/ -
GET
,POST
,HEAD
,OPTIONS
- Список заметок, создание заметки. По запросуGET
приходят множественные данные - все связанные объекты, а так же их вложенное множество объектов. Чтобы получить данные без вложенности есть другие методыAPI
, описанные ниже.https://backend.radif.ru/api/todos/3/ -
GET
,PUT
,PATCH
,DELETE
,HEAD
,OPTIONS
- Вывод, редактирование, удаление заметки (Метод переопределён! Вместо фактического удаления активность меняется на 0 (False
)), вместо3
подставитьid
Заметки
https://backend.radif.ru/api/todos/async_fish_todos -
GET
,HEAD
,OPTIONS
- Асинхронное получение сгенерированныхРыба-текстов
. Используются библиотекиAsyncIO
иAiohttp
. Выполняется множество асинхронных запросов (отдельно за каждым элементом списка), в ответ приходит сформированный список. Данные всегда разные.API
внешнего ресурса: https://fish-text.ru/apihttps://backend.radif.ru/api/todos/active -
GET
,HEAD
,OPTIONS
- Получить все активные заметки без вложенных объектовhttps://backend.radif.ru/api/todos/inactive -
GET
,HEAD
,OPTIONS
- Получить все неактивные заметки без вложенных объектов
https://backend.radif.ru/api/todos/?created_after=1995-2-25&created_before=2021-12-10&project=3&project__name=Сложившаяся%20структура -
GET
,POST
,HEAD
,OPTIONS
- Вывод данных заметок. Фильтрация заметок по дате, в поле<1995-2-25>
- указываем от какой даты считаем, в поле<2021-12-10>
- до какой даты. Фильтрация заметок поid
, поле<3>
, в браузере можно сразу выбрать проект. Фильтрация заметок по имени проекта, поле<Сложившаяся%20структура>
. Достаточно использовать 1 из фильтров или использовать комбинации. Настроено с помощью кастомногоdjango-filter
, некоторые поля дефолтныеhttps://backend.radif.ru/api/todos/?limit=3&offset=2/ -
GET
,POST
,HEAD
,OPTIONS
- В поле<3>
указываем количество заметок, данные которых придут в ответе на запрос, в поле<2>
- смещение относительно первой заметки. В ответ кроме заметок приходят ссылки на смещение относительно страницы и другие данные
https://backend.radif.ru/api/roles/ -
GET
,HEAD
,OPTIONS
- Список ролей. По запросуGET
приходят множественные данные - все связанные объекты, а так же их вложенное множество объектов. Чтобы получить данные без вложенности есть другие методыAPI
, описанные ниже.
https://backend.radif.ru/api/roles/only -
GET
,HEAD
,OPTIONS
- Получить все роли без вложенных объектов
- Администраторы (Джанговские и из моих групп зависимостей) могут всё.
- Загружать, удалять и изменять данные изображений, конвертировать разрешения, могут авторизованные пользователи
- Читать данные могут все. Но не все данные включены в сериализаторе
https://backend.radif.ru/api/images/ -
GET
,POST
,HEAD
,OPTIONS
- Загрузка изображения из ПК или внешнего источника. Получение списка доступных изображенийhttps://backend.radif.ru/api/images/3/ -
GET
,PATCH
,DELETE
,HEAD
,OPTIONS
- Получение детальной информации об изображении. Удаление изображения. Изменение имени методомPATCH
, другие изменения запрещены. Вместо3
подставитьid
изображенияhttps://backend.radif.ru/api/images/3/resize/ -
POST
,OPTIONS
- Конвертирование изображения - изменение размера и сохранение в новый файл с указанием родителя. Вместо3
подставитьid
изображения
python manage.py add_all_data
- Скрипт единой точки создания всех дефолтных данных в БД. Данные собираются рандомно
python manage.py add_roles
- Скрипт заполнения таблиц БД дефолтными группами прав, ролями
python manage.py add_users
- Скрипт заполнения таблиц БД дефолтным админом и пользователями. Так же админ добавляется в группу разрешений Администратор, остальные дефолтные пользователи попадают в рандомные группы разрешений из БД (но не в группу Администраторов!). В группу Владелец проекта будут так же попадать те, кто будут создавать свои проекты. В группу Разработчик будут попадать те, кто оставляют заметки. Администраторов смогут назначать только администраторы.
python manage.py add_projects
- Скрипт заполнения таблиц БД дефолтным проектами, те в свою очередь связываются с рандомными дефолтными пользователями из БД, работающими с конкретными проектами
python manage.py add_todos
- Скрипт заполнения таблиц БД дефолтным заметками, каждая привязывается к конкретным рандомному проекту и конкретным рандомному пользователю из БД
python manage.py test
- для запуска всех тестов приложенийbackend
-a.
Если нужно и есть на это время, могу глубже вникнуть и стандартизированно покрывать тестами весь код.
Обычно и так всё тестирую самостоятельно через
Postman
,отладчик
,дебагер PyCharm
в ходе разработки - даже без документации, просто вникаю, что происходит внутри, захожу в исходники и разбираюсь, прогоняя разные варианты и устраняя ошибки.
Для
JavaScript
,React
используюбраузерный дебагер
,отладчик
- можно работать с кодом, стилями, заголовками, сетью, отслеживать нагрузку - время, размер, содержимое прогоняемых данных в обе стороны,React Developer Tools
, делать проверку наPixel Perfect
, ставить точки остановки для скриптов, отслеживать данные переменных, с хранилищами типаCookies
,Local Storage
и многое другое - большинство инструментов уже встроено.
python venv env
- Создание виртуального окружения
pip install django djangorestframework markdown django-filter
- Установка зависимостей, полезных библиотек
pip freeze > requirements.txt
- Помещаем все зависимости проекта в файлrequirements.txt
pip install -r requirements.txt
- Устанавливаем все зависимости проекта из файлаrequirements.txt
pip list
- Удобное отображение всех установленных приложений, библиотек
django-admin startproject config
- Создание проекта 'config'
python manage.py startapp users
- Создание приложения 'Пользователи'
python manage.py makemigrations
- Создание миграций, необходимо после создания/обновления моделей
python manage.py migrate
- Выполнение миграций
python manage.py sqlmigrate <app_name>
- Выполняется после создания миграций. Позволяет вывести на экран SQL-запросы, которые будут генерироваться для Django командой применения миграций к базе данных (то есть к таблицам, соответствующим указанному приложению)
python manage.py collectstatic
- Сборка стандартных и подготовленных статических файлов
python manage.py createsuperuser
- Создание супер-пользователя
python manage.py runserver 0.0.0.0:3333
- Запуск проекта на порту 3333 (доступ http://localhost:3333)
python manage.py test
- Запуск всех созданных тестов для приложений
Работа с дампами БД. В проекте не использую, так как не поддерживается кириллица. Использую export БД в json файл от IDE Pycharm, дампы в каталоге dumps_pycharm_export
python manage.py dumpdata --indent 2 --exclude auth.permission --exclude contenttypes > ./json/dumps_django_dumpdata/all_data.json
- Дамп всей БД, за исключением некоторых таблиц--exclude auth.permission
и--exclude contenttypes
, мешающих восстановлению БД из дампа.--indent 2
- количество отступов в json файле
python manage.py dumpdata users > ./json/dumps_django_dumpdata/users_data.json
- Дамп БД приложенияusers
python manage.py dumpdata todo.project > ./json/dumps_django_dumpdata/todo_project_data.json
- Дамп БД конкретной таблицы моделиproject
приложенияtodo
python manage.py dumpdata todo.todo > ./json/dumps_django_dumpdata/todo_todo_data.json
- Дамп БД конкретной таблицы моделиtodo
приложенияtodo
python manage.py loaddata ./json/dumps_django_dumpdata/all_data.json
- импорт данных из дампа
npx create-react-app frontend
- Создание/установка проекта на React + Babel, webpack и другие полезные зависимости для комфортной работы,npx
- режим одноразового запуска, пакет для запуска пакетов без установки в систему.
npm run start
- Запуск фронтенд проекта на отладочном сервере, выполнять в корне фронта (в данном случае в каталоге frontend)
npx react-codemod rename-unsafe-lifecycles
- Переименовать все устаревшие жизненные циклы на их новые имена
npm install
- Установка зависимостей fronted проекта
npm run build
- Сборка проекта для Prod
passwd
- Изменить пароль.
adduser radif
- Создать пользователя, заполнение данных о пользователе.
usermod -aG sudo radif
- Добавить в группуsudo
, чтобы дать праваroot
пользователю.
su - radif
- Переключиться на нового пользователя.
sudo apt update
- Обновляет индексы пакетов системы. Рекомендуется выполнить перед установкой новых программных пакетов. Используется для синхронизации списков пакетов в системе. Извлекает последние списки пакетов PPA и репозиториев в системе и обеспечивает их актуальность.
sudo apt list --upgradable
- Список пакетов, готовых к обновлению.
sudo apt upgrade
- Обновляет пакеты до последних версий и устанавливает новые пакеты, если они требуются в качестве зависимостей. Также устанавливает все обновления безопасности, необходимые системе. Он не удаляет никакие пакеты, а если какие-либо из них предназначены для удаления, он их пропускает.
curl <address>
- FTP-клиент / HTTP-клиент - В поле<address>
указываем необходимый ресурс и получаем данные как напримерJSON
поAPI
, так и целого сайта и т.д.
python -m pip install --upgrade --force-reinstall pip
- Помогает, если возникают ошибки, при смене каталога виртуального окружения.
df -h
- Узнать свободное место
sudo apt remove python2 --simulate
- Симуляция удаления (н-рpython2
), показ что случится после этогоsudo apt remove python2
- удаления (н-рpython2
- лучше этого не делать!)sudo apt autoremove --purge
- удаления файлов конфигурации и неиспользуемых пакетов
dpkg -l | grep python
-dpkg -l
Посмотреть все установленные пакеты| grep python
отфильтрованных по слову python
ls /boot/
- Посмотреть ядра системыsudo uname -a
- Текуще используемое ядроapt list --installed | egrep "linux-image|linux-Headers"
- Какие версии ядер были установленыdpkg --list | egrep "linux-image|linux-Headers"
- Список ядерsudo apt purge linux-image-unsigned-5.4.0-88-generic linux-image-unsigned-5.4.0-74-generic
- Выбираю и удаляю лишниеsudo update-grub2
- После нужно обновить конфигурациюGrub
sudo apt --purge autoremove
- Скриптpurge-old-kernels
, который можно было использовать для удаления старых ядерsudo apt-
GETpurge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' |
HEAD-n -1)
- Удалить все старые ядра, кроме используемого и предпоследнегоsudo apt autoremove
- Затем нужно выполнить команду очистки системыsudo update-grub
- и вручную обновить конфигурациюgrub
.
docker container stop 7ff82ed6e6a5 d266589c0e18 6decb775db24
- Временно останавливаю контейнеры (поid
) с сервисами, использующими порты 80 и 443. Если бы использовалась монолитная архитектура с Nginx или Apache на основной системе, то необходимо было бы остановить их
sudo certbot certonly --dry-run --standalone -d frontend.radif.ru -d backend.radif.ru -d django.radif.ru -d intergalactic.radif.ru -d radif.ru -d pro-gidroizolyaciya.ru
- Проверка возможности получения, возможные ошибки. Делается так как существует ограничение на выдачу сертификатов и лучше сначала проверить команду
sudo certbot certonly --standalone -d frontend.radif.ru -d backend.radif.ru -d django.radif.ru -d intergalactic.radif.ru -d radif.ru -d pro-gidroizolyaciya.ru
- Получение сертификатов--standalone
- позволяет получить быстро, без доп манипуляций с конфигамиnginx
docker container start 7ff82ed6e6a5 d266589c0e18 6decb775db24
- Запускаю приостановленные контейнеры (поid
)
git remote set-url origin https://radif:radif_token@github.com/radif-ru/www.git
- Чтобы не вводить каждый раз пароль, вместоradif_token
- подставить сгенерированный токенgit
,www
- название репозитория
git reset --hard <hash>
- Жесткое удаление коммита. Вместо<hash>
- хэш-код коммита, к которому хотим вернуться
git push --force
- Принудительно запушить изменения вGitHub
. Например, перед этим можно выполнить действие выше и коммит удалится не только на ПК, но и наGitHub
git commit --amend -m 'Новое сообщение'
- Переименование предыдущего коммита, так же как и при удалении коммита, нужно выполнить команду ниже. Не стоит так делать, если ещё кто-то пользуется этим репозиторием, иначе могут возникнуть конфликты и ошибки!
git push --force origin <имя ветки на удаленном репозитории>
- Опасная команда, может привести к потерям - если репозиторий используется несколькими пользователями!
docker-compose build
илиdocker-compose -f docker-compose.prod.yml build
- Создать образ. Префикс-f
имя_файла
, послеdocker-compose
позволяет запускаться из файла с нестандартным именем для выполнения любых возможных команд
docker-compose up
илиdocker-compose -f docker-compose.prod.yml up
- Запустить контейнер
docker-compose up -d --build --remove-orphans
илиdocker-compose -f docker-compose.prod.yml up -d --build --remove-orphans
- Создать образ и запустить контейнер в фоне (-d
).--remove-orphans
- Удаление контейнеров для не определённых служб в файле создания
docker image ls -a && docker container ls -a && docker volume ls && docker network ls
- Посмотреть все образы/контейнеры/тома/сети
docker exec -it <CONTAINER ID or NAME> bash
илиdocker exec -it <CONTAINER ID or NAME> sh
и т.д. - Зайти в работающий контейнер
docker stop $(docker ps -aq)
- Остановить контейнеры
docker-compose down
илиdocker-compose -f docker-compose.prod.yml down
- Остановить запущенные контейнеры и сети
docker-compose down -v
илиdocker-compose -f docker-compose.prod.yml down -v
- Удалить тома вместе с контейнерами
docker system prune
илиdocker container prune && docker image prune && docker volume prune && docker network prune
- Удалить неиспользуемые контейнеры/образы/тома/сети
docker-compose logs -f
илиdocker-compose -f docker-compose.prod.yml logs -f
- Проверка наличия ошибок в журналах, просмотр логов
docker network create nginx-proxy
- Создать сетьnginx-proxy
docker volume inspect django-on-docker_Postgres_data
- Проверить, что том (volume) был создан
docker rmi <CONTAINER ID>
,docker rmi -f <CONTAINER ID>
- Удалить образ
docker image rm <name_or_id>
,docker container rm <name_or_id>
,docker volume rm <name_or_id>
- Удалить образы, контейнеры, тома по названию илиid
docker stop <CONTAINER ID>
- Приостановить контейнер
docker start <CONTAINER ID>
- Запустить ранее остановленный контейнер
docker restart <CONTAINER ID>
- Перегрузить контейнер
docker ps
,docker ps -a
- Посмотреть работающие и все контейнеры
docker images
- Посмотреть список всех образов
service docker restart
- Перезапустить сервис докера
docker-compose exec web python manage.py flush --no-in
PUT- Очистка таблиц
docker-compose exec web python manage.py makemigrations --no-in
PUT`` - Создание миграций
docker-compose exec web python manage.py migrate
- Запуск миграций
docker-compose exec web python manage.py collectstatic --no-in
PUT--clear
- Сборка стандартных и подготовленных статических файлов
docker exec -i 864763038dfb pg_restore -U radif -v -d geekshop < ./geekshop_Postgres.dump
- Восстановить БД из дампа снаружи, не входя в контейнер
docker-compose exec db psql --username=admin --dbname=db_name
- Вход в сервисdb
, а внутри него вход в Postgres, имяadmin
, бдdb_name
# \l
- Показать базы данных
# \c db_name
- Подключение к базе данныхdb_name
# \dt
- Список зависимостей
# \q
- Выход из Postgres