https://backend.radif.ru/ -
Backend- серверhttps://backend.radif.ru/swagger/ -
OpenAPISwaggerhttps://backend.radif.ru/redoc/ -
OpenAPIReDochttps://backend.radif.ru/api/ -
Django REST APIhttps://backend.radif.ru/graphql/ -
GraphiQLhttps://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вJsonhttps://backend.radif.ru/swagger.yaml -
REST APIвYAMLhttps://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-filterhttps://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-filterhttps://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- После нужно обновить конфигурациюGrubsudo 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-inPUT- Очистка таблиц
docker-compose exec web python manage.py makemigrations --no-inPUT`` - Создание миграций
docker-compose exec web python manage.py migrate- Запуск миграций
docker-compose exec web python manage.py collectstatic --no-inPUT--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