Вы хотите, чтобы ваша команда Наслаждайтесь Ваш рабочий процесс разработки? Как вы думаете, создание программного обеспечения должно быть Веселый и экзистентный? Если так, Это пост для тебя!
Я развивался с Django в течение многих лет, и я никогда не был счастливее с разработкой своего проекта Django, чем сейчас. Вот как я делаю день развития с Джанго самым расслабляющим и приятным опытом развития, возможным для меня и моей инженерной команды.
Пользовательский инструмент CLI для вашего проекта Django
Вместо печати:
python3 -m venv env source env/bin/activate pip install -r requirements.txt python3 manage.py makemigrations python3 manage.py migrate python3 manage.py collectstatic python3 manage.py runserver
Разве не было бы намного приятнее ввести:
make start
… И есть все, что случилось для вас? Я думаю так!
Мы можем сделать это с помощью самостоятельного заготовки! Вот тот, который я часто использую при разработке моих приложений Django, например ApplyByapi.com :
SHELL := /bin/bash include .env .PHONY: help help: ## Show this help @egrep -h '\s##\s' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' .PHONY: venv venv: ## Make a new virtual environment python3 -m venv $(VENV) && source $(BIN)/activate .PHONY: install install: venv ## Make venv and install requirements $(BIN)/pip install -r requirements.txt migrate: ## Make and run migrations $(PYTHON) manage.py makemigrations $(PYTHON) manage.py migrate db-up: ## Pull and start the Docker Postgres container in the background docker pull postgres docker-compose up -d db-shell: ## Access the Postgres Docker database interactively with psql docker exec -it container_name psql -d $(DBNAME) .PHONY: test test: ## Run tests $(PYTHON) $(APP_DIR)/manage.py test application --verbosity=0 --parallel --failfast .PHONY: run run: ## Run the Django server $(PYTHON) $(APP_DIR)/manage.py runserver start: install migrate run ## Install requirements, apply migrations, then start development server
Вы заметите наличие линии Включите .env
выше. Это обеспечивает сделать
имеет доступ к переменным среды, хранящиеся в файле с именем .env
. Это позволяет сделать использовать эти переменные в своих командах, например, имя моей виртуальной среды или пройти в $ (Dbname)
к PSQL
.
Что с этим странным ” ##
” Синтаксис комментариев? Подобный макияж дает вам удобный набор псевдонимов командной строки, которые вы можете проверить в своем проекте Django. Это очень полезно, пока вы можете вспомнить, каковы все эти псевдонимы.
Помощь
Команда выше, которая работает по умолчанию, печатает полезный список доступных команд при запуске сделать
или Сделайте помощь
:
help Show this help venv Make a new virtual environment install Make venv and install requirements migrate Make and run migrations db-up Pull and start the Docker Postgres container in the background db-shell Access the Postgres Docker database interactively with psql test Run tests run Run the Django server start Install requirements, apply migrations, then start development server
Все обычные команды Django покрыты, и у нас есть тест
Команда, которая запускает наши тесты с опциями, которые мы предпочитаем. Блестящий.
Вы можете прочитать мой полный Сообщите о самоокупании Makefiles здесь , который также включает в себя пример Makefile с использованием пипенв
.
Сохраните свой мозг с помощью крючков с предварительной коммитацией
Я ранее писал о некоторых Техническая эргономика Это может значительно облегчить разработку отличного программного обеспечения. Одна область, которая не является простой,-это использует предварительные крючки для кода Lint до его проверки. Это помогает обеспечить качество кода, которые регистрируют ваши разработчики, но, что наиболее важно, гарантирует, что никто в вашей команде не тратит время, пытаясь запомнить, должен ли он быть одиноким или двойным цитированием или куда поставить разрыв.
Смущающе названный Предварительная структура это фантастический способ поддерживать крючки (которые не включены в клонированные репозитории) в соответствии с местными средами. Вот мой файл конфигурации, .pre-commit-config.yaml
, для моих проектов Django:
fail_fast: true repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.1.0 hooks: - id: detect-aws-credentials - repo: https://github.com/psf/black rev: 19.3b0 hooks: - id: black - repo: https://github.com/asottile/blacken-docs rev: v1.7.0 hooks: - id: blacken-docs additional_dependencies: [black==19.3b0] - repo: local hooks: - id: markdownlint name: markdownlint description: "Lint Markdown files" entry: markdownlint '**/*.md' --fix --ignore node_modules --config "./.markdownlint.json" language: node types: [markdown]
Эти крючки проверяют на случайные секретные коммиты, форматируйте файлы Python с использованием Черный , Формат фрагменты Python в файлах разметки с использованием Blacken-Docs
и Lint Markdown Files также. Вероятно, есть еще более полезные крючки для вашего конкретного варианта использования: см. Поддерживаемые крючки исследовать.
Полезные Gitignores
Недооценка способ улучшить повседневное развитие вашей команды-убедиться, что ваш проект использует всестороннюю .gitignore
файл. Это может помочь предотвратить совершенные файлы, содержащие секреты, и может дополнительно сэкономить часы разработчиков Tedium, гарантируя, что вы никогда не просеиваете через git diff
сгенерированных файлов.
Эффективно создать Gitignore для Python и Django Projects , Toptal’s gitignore.io Может быть хорошим ресурсом для создания надежного .gitignore
файл. Я до сих пор рекомендую изучить сгенерированные результаты самостоятельно, чтобы гарантировать, что игнорируемые файлы соответствуют вашим варианту использования, и что ничего, что вам нужно игнорировать, не прокомментировано.
Непрерывное тестирование с действиями GitHub
Если ваша команда работает над GitHub, настройка процесса тестирования с действиями-это низко висящие фрукты. Тесты, которые работают в постоянной среде по каждому запросу на притяжение, могут помочь устранить загадки «Работы на моей машине», а также гарантировать, что никто не сидит вокруг, ожидая, когда тест будет работать локально.
Расстановленная среда CI, такая как действия GitHub, также может помочь при проведении интеграционных тестов, которые требуют использования ресурсов управляемых услуг. Вы можете использовать Зашифрованные секреты в репозитории Чтобы предоставить действию доступ к ресурсам в среде тестирования, не беспокоясь о создании ресурсов тестирования и доступ к ключам для каждого из ваших разработчиков.
Я много раз писал о настройке рабочих процессов действий, в том числе Использование одного для запуска вашего Makefile и Как интегрировать данные о событии GitHub Анкет GitHub даже взял интервью за действиями однажды.
Для проектов Django есть рабочий процесс действий GitHub, который запускает тесты с последовательной версией Python всякий раз, когда кто -то открывает запрос на привлечение в репозитории.
name: Run Django tests on: pull_request jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.8' - name: Install dependencies run: make install - name: Run tests run: make test
Для команд установки и тестирования я просто использовал макияж, который был зарегистрирован в репозитории. Преимущество использования ваших команд MakeFile в ваших тестовых процессах CI заключается в том, что вам нужно только держать их в курсе в одном месте – ваш файл Make -файл! Нет больше “Почему это работает на месте, но не в CI ??!” ” головные боли.
Если вы хотите увеличить свою игру безопасности, вы можете добавить Django Security Check как действие тоже.
Настройте свой проект Django для успеха
Хотите помочь сохранить свою команду разработчиков счастливыми? Установите их на успех с этими лучшими практиками для Django Development. Помните, что унция мозгового управления стоит фунта программного обеспечения!
Для получения дополнительных советов о Джанго и о том, как построить отличную техническую команду, перейдите к Victoria.dev или подписаться через RSS Анкет
Оригинал: “https://dev.to/victoria/django-project-best-practices-to-keep-your-developers-happy-23e4”