из обратной связи по последнему тестовому заданию: Комментарий к вашему ТЗ от проверяющего: "Плюсы: ТЗ выполнено полностью. Реализованы основные пользовательские операции: регистрация, логин, логаут, просмотр, редактирование, мягкое удаление пользователя. Продуманная схема БД, RBAC с ресурсами, действиями, ролями. Полное API для управления правами администратором. Корректные HTTP статусы - 401, 403. Полноценные бизнес-сущности: Product, Category, Order с CRUD и реализацией интеграции с системой прав доступа. Есть скрипт для загрузки тестовых данных при инициализации. Минусы: Нет эндпоинта для логаута в v1/auth"
весь прикол в том, что ручка логаута в v1/auth у меня есть )))
Вы тратите день на настройку окружения вместо программирования
чегооооооо??? установил новую версию питона в отдельную папку, в проекте сделал венв python -m venv .venv активировал .venv\scripts\activate. всё.
объяснение докера в статье - не люблю такое выражение,но чувак - учи матчасть. смотри не скажи такое на собеседовании.
pip freeze > requirements.txt
uv? не, не слышал
Мы будем использовать Django 5.2.6
задачки на подумать. 1) что будет если использовать django select2 для выборки и таблицы с 20-30 тыс записей? а про подавление некоторых исключений в классах я вообще молчу. 2) сколько предложений о работе на джанге и колько на фастапи?
requrements.txt мне на нравтся одним - там нет дерева зависимостей. если я по ошибке поставил какойнибудь пакет,а он за собой потянул ещё несколько, то непонятно, что удалять. вроде uv показывает зависимости, но не уверен,не использовал
у автора немного сумбурный порядок изложения, но в целом подход нравится. плюсанул. молодец из замечаний 1) docker run --name fastapi-container -p 80:80 -d -v $(pwd):/code fastapi-image что это за извращение? в волумес можешь поместить всю папку с фастапи. и таким образом всё что пишешь в идешке - отражается и в докере - фастапи в контейнере перезагружается, а логи ты видишь в терминале идешки. если у тебя несколько контейнеров, и они засирают терминал, то этой командой docker logs -f <имя контейнера> можешь видеть логи нужного тебе контейнера в текущем времени 2) для уменьшения объёма контейнера советую в докере установить облегчённую версию питона,поставить на неё зависимости, а потом установить новый образ а зависимости ставить из старого
3) не забываем про хеалсчеки, зависимости и порты одно из решений depends_on: db: condition: service_healthy healthcheck: test: [ "CMD", "sh", "-c", "curl -sk https://localhost:8000/health_check/ -o /dev/null -w '%{http_code}' | grep -q '200' || exit 1" ] interval: 5s timeout: 5s retries: 10 networks: devops_mynetwork: ipv4_address: 172.20.0.12 зайди в контейнер и проверь,как отработал хеалсчек если тебе не надо открывать порт наружу, используй expose: вместо ports: если в контейнере надо внести запись в hosts, то есть extra_hosts:
звон немножко в другом месте. такие системы очень удобны для разработчиков (фронтенд, бекенд) в случае когда у себя на компе надо развернуть всю систему, а ставить чужой стек неохота. например, зачем фронту ставить питон, а питонщику реакт или вуе. кстати,а ты сам при разработке где используешь бд - в докере или нативно? я например,для своей команды настроил всё в докерах - и фронт,и бекенд и базы данных.причём благодаря томам фастпишник может писать код у себя в идешке, а результат видеть и в терминале и в браузере. а для фронтов это вообще замечательно - не надо ставить питон. к тому же всё это проксирую в нгинксе по доменам и работаем в https. если у тебя есть готовое решение для командной работы - то вперёд, напиши статью, если вещь фирменная - возьмём
всё это конечно очень хорошо,особенно учитывая что вы стартап. однако 1 ваше видео можно скачать по кускам - отдельно видео, отдельно аудио,потом соединить. в интернете есть такие сервисы 2 всё намного проще - obs studio и подобные. можно записать экран в хорошем качестве вопрос - смысл в вашей защите от скачивания, если "индеец Зоркий Глаз увидел,что стены нет"?
ещё одна статья написанная нейосеткой
Количество вакансий для Junior снизилось.
Их стало сложнее "переманить"
одно другому противоречит
те кто заминусовал Andrbob -а, вы хотя бы объясните почему
пишы исчо
а теперь компотом объясни комплексные числа. на 0 делить можно, но числа будут мнимые
из обратной связи по последнему тестовому заданию:
Комментарий к вашему ТЗ от проверяющего:
"Плюсы: ТЗ выполнено полностью. Реализованы основные пользовательские операции: регистрация, логин, логаут, просмотр, редактирование, мягкое удаление пользователя. Продуманная схема БД, RBAC с ресурсами, действиями, ролями. Полное API для управления правами администратором. Корректные HTTP статусы - 401, 403. Полноценные бизнес-сущности: Product, Category, Order с CRUD и реализацией интеграции с системой прав доступа. Есть скрипт для загрузки тестовых данных при инициализации.
Минусы: Нет эндпоинта для логаута в v1/auth"
весь прикол в том, что ручка логаута в v1/auth у меня есть )))
звон немного в другом месте
пусть пишет. нам будет проще найти работу
чегооооооо??? установил новую версию питона в отдельную папку, в проекте сделал венв python -m venv .venv активировал .venv\scripts\activate. всё.
объяснение докера в статье - не люблю такое выражение,но чувак - учи матчасть. смотри не скажи такое на собеседовании.
uv? не, не слышалзадачки на подумать.
1) что будет если использовать django select2 для выборки и таблицы с 20-30 тыс записей? а про подавление некоторых исключений в классах я вообще молчу.
2) сколько предложений о работе на джанге и колько на фастапи?
хрень какая-то
ну типа есть гитверче
молодец!
requrements.txt мне на нравтся одним - там нет дерева зависимостей. если я по ошибке поставил какойнибудь пакет,а он за собой потянул ещё несколько, то непонятно, что удалять. вроде uv показывает зависимости, но не уверен,не использовал
может и мне подобную статью забабахать?
у автора немного сумбурный порядок изложения, но в целом подход нравится. плюсанул. молодец
из замечаний
1)
docker run --name fastapi-container -p 80:80 -d -v $(pwd):/code fastapi-image что это за извращение? в волумес можешь поместить всю папку с фастапи. и таким образом всё что пишешь в идешке - отражается и в докере - фастапи в контейнере перезагружается, а логи ты видишь в терминале идешки. если у тебя несколько контейнеров, и они засирают терминал, то этой командой docker logs -f <имя контейнера> можешь видеть логи нужного тебе контейнера в текущем времени2) для уменьшения объёма контейнера советую в докере установить облегчённую версию питона,поставить на неё зависимости, а потом установить новый образ а зависимости ставить из старого
FROM python:3.13-slim AS builder
WORKDIR /install
RUN apt update && apt install -y build-essential
COPY requirements.txt .
RUN pip install --upgrade pip &&
pip wheel --no-deps --wheel-dir /wheels -r requirements.txt
RUN useradd -m myuser
USER myuser
FROM python:3.13-slim
ENV PYTHONDONTWRITEBYTECODE=1
PYTHONUNBUFFERED=1
WORKDIR /backend
Добавляем самоподписной сертификат в доверенные
RUN apt-get install -y ca-certificates &&
update-ca-certificates
RUN apt update && apt-get install -y curl grep
Копируем wheels и устанавливаем зависимости
COPY --from=builder /wheels /wheels
COPY requirements.txt .
RUN pip install --no-deps --no-index --find-links=/wheels -r requirements.txt
--no-deps: Не устанавливает зависимости пакетов, только те, что перечислены в requirements.txt.
--no-index: Не использует PyPI или другие индексы , т.е. не будет скачивать пакеты из интернета.
--find-links=/wheels: Ищет пакеты локально в директории /wheels , где должны лежать .whl (wheel) файлы.
-r requirements.txt: Указывает список пакетов для установки.
--no-cache-dir: Отключает кэширование загруженных пакетов. Это может быть полезно, чтобы уменьшить размер образа Docker.
COPY . .
ENTRYPOINT ["sh", "-c", "
if [ "$PROFILE" = "1" ]; then
python -m cProfile -o output.prof runserver.py;
else
uvicorn app.main:app --host 0.0.0.0 --port 8000
--ssl-keyfile /usr/local/share/ca-certificates/tls.key
--ssl-certfile /usr/local/share/ca-certificates/tls.crt
--reload;
fi"]
3) не забываем про хеалсчеки, зависимости и порты
одно из решений
depends_on:
db:
condition: service_healthy
healthcheck:
test: [ "CMD", "sh", "-c", "curl -sk https://localhost:8000/health_check/ -o /dev/null -w '%{http_code}' | grep -q '200' || exit 1" ]
interval: 5s
timeout: 5s
retries: 10
networks:
devops_mynetwork:
ipv4_address: 172.20.0.12
зайди в контейнер и проверь,как отработал хеалсчек
если тебе не надо открывать порт наружу, используй expose: вместо ports:
если в контейнере надо внести запись в hosts, то есть extra_hosts:
звон немножко в другом месте. такие системы очень удобны для разработчиков (фронтенд, бекенд) в случае когда у себя на компе надо развернуть всю систему, а ставить чужой стек неохота. например, зачем фронту ставить питон, а питонщику реакт или вуе. кстати,а ты сам при разработке где используешь бд - в докере или нативно?
я например,для своей команды настроил всё в докерах - и фронт,и бекенд и базы данных.причём благодаря томам фастпишник может писать код у себя в идешке, а результат видеть и в терминале и в браузере. а для фронтов это вообще замечательно - не надо ставить питон. к тому же всё это проксирую в нгинксе по доменам и работаем в https.
если у тебя есть готовое решение для командной работы - то вперёд, напиши статью, если вещь фирменная - возьмём
Отсюда нет смысла пытаться это далее автоматизировать - есть такая штука - инфраструктура как код называется
всё это конечно очень хорошо,особенно учитывая что вы стартап. однако
1 ваше видео можно скачать по кускам - отдельно видео, отдельно аудио,потом соединить. в интернете есть такие сервисы
2 всё намного проще - obs studio и подобные. можно записать экран в хорошем качестве
вопрос - смысл в вашей защите от скачивания, если "индеец Зоркий Глаз увидел,что стены нет"?
чувак, учи git, terraform и ansible. а в настройках нгинкса не забывай отключать устаревшую криптографию.