遵循 Django 项目最佳实践,让你的开发人员满意
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
你想让你的团队享受开发流程吗?你认为软件开发应该是一件充满乐趣且意义非凡的事情吗?如果是这样,那么这篇文章就是为你准备的!
我使用 Django 进行开发已经很多年了,但我从未像现在这样对我的 Django 项目设置感到如此满意。以下是我如何让我和我的工程团队在使用 Django 进行开发时,拥有最轻松愉快的开发体验的方法。
适用于 Django 项目的自定义 CLI 工具
而不是输入:
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
……而这一切都发生在你身上了吗?我想是的!
我们可以使用自文档化的 Makefile 来实现这一点!以下是我在开发 Django 应用程序(例如ApplyByAPI.com )时经常使用的一个 Makefile :
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
你会注意到上面这行代码include .env。这确保了makeMake 可以访问存储在名为 . 的文件中的环境变量.env。这使得 Make 能够在它的命令中使用这些变量,例如我的虚拟环境的名称,或者传递$(DBNAME)给psql.
这个奇怪的“ ”注释语法是怎么回事##?像这样的 Makefile 文件提供了一套方便的命令行别名,你可以将它们添加到你的 Django 项目中。只要你能记住所有这些别名,它就非常有用。
上述命令默认运行,会在您运行`or`help时打印可用命令的有用列表:makemake help
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 命令都已涵盖,而且我们还有一个test命令可以使用我们偏好的选项运行测试。太棒了。
您可以在这里阅读我关于自文档化 Makefile 的完整文章,其中还包含一个使用示例 Makefile 的示例pipenv。
使用预提交钩子节省你的脑力
我之前写过一些技术人机工程学方面的文章,这些技巧可以大大简化团队开发优秀软件的过程。其中一个显而易见的技巧就是使用 pre-commit hooks 在提交代码之前进行代码检查(lint)。这有助于确保开发人员提交的代码质量,但更重要的是,它可以确保团队成员无需花费时间去记住应该用单引号还是双引号,或者换行符应该放在哪里。
虽然pre-commit 这个名字容易让人困惑,但它实际上是一种非常棒的方式,可以确保钩子(克隆仓库中不包含这些钩子)在不同本地环境中保持一致。以下是我.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]
这些钩子会检查意外的秘密提交,使用Black格式化 Python 文件,使用 格式化 Markdown 文件中的 Python 代码片段blacken-docs,并对Markdown 文件进行 lint 检查。可能还有更多适用于您特定用例的实用钩子:请参阅支持的钩子列表进行探索。
有用的 .gitignore 文件
提升团队日常开发体验的一个常被低估的方法是确保项目使用完善的.gitignore文件结构。这不仅可以防止提交包含敏感信息的文件,还能避免开发人员花费大量时间筛选git diff生成的文件,从而节省大量时间。
要高效地为 Python 和 Django 项目创建.gitignore 文件,Toptal 的gitignore.io是一个不错的资源,可以生成一个健壮的.gitignore文件。但我仍然建议您自行检查生成的结果,以确保忽略的文件符合您的使用场景,并且没有注释掉任何您想要忽略的内容。
使用 GitHub Actions 进行持续测试
如果你的团队使用 GitHub,那么使用 Actions 设置测试流程就轻而易举了。在每个 pull request 上都运行在一致环境下的测试,可以帮助消除“在我机器上运行正常”的难题,并确保没有人会浪费时间等待本地测试运行。
像 GitHub Actions 这样的托管 CI 环境也能在运行需要使用托管服务资源的集成测试时提供帮助。您可以使用代码仓库中的加密密钥来授予 Actions 运行器访问测试环境中资源的权限,而无需担心为每个开发人员创建测试资源和访问密钥。
我曾多次撰写关于设置 Actions 工作流的文章,包括如何使用 Actions 工作流来运行 Makefile,以及如何集成 GitHub 事件数据。GitHub 甚至还就Actions 问题采访过我。
对于 Django 项目,这里有一个 GitHub Actions 工作流,每当有人在存储库中打开拉取请求时,它都会使用一致的 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 测试工作流程中使用 Makefile 命令的好处在于,你只需要在一个地方更新它们——Makefile 文件!再也不用担心“为什么本地运行正常,CI 却不行?”这种令人头疼的问题了。
如果您想提升安全性,还可以添加Django 安全检查作为一项操作。
成功配置您的 Django 项目
想让你的开发团队保持快乐吗?那就用这些 Django 开发最佳实践帮助他们走向成功吧。记住,一盎司的智慧胜过一磅的软件!
有关 Django 以及如何组建一支优秀的技术团队的更多技巧,请访问victoria.dev或通过 RSS 订阅。
文章来源:https://dev.to/victoria/django-project-best-practices-to-keep-your-developers-happy-23e4