You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何创建pre-commit钩子,在推送至服务器前检测Django代码错误

为Django项目搭建Pre-Commit Hook指南

嘿,很高兴你开始尝试用pre-commit hooks来规范代码提交流程!针对你的Django项目,我给你整理了一套实用的示例脚本和步骤,帮你快速搭建起来,确保每次提交到DigitalOcean服务器前,代码都经过必要的检查。

第一步:创建并配置pre-commit文件

首先,你需要在项目的.git/hooks目录下创建pre-commit文件(注意没有后缀名),并赋予它执行权限:

  1. 进入项目的git hooks目录:
cd .git/hooks
  1. 创建并编辑pre-commit文件:
nano pre-commit
  1. 编辑完成后,添加执行权限:
chmod +x pre-commit

第二步:Django项目专属的检查脚本

下面是一个适配Django项目的pre-commit脚本,包含了几个核心的检查环节,你可以根据自己的项目需求调整或增减:

#!/bin/bash

echo "🚀 启动pre-commit代码检查..."

# 1. 代码风格检查(依赖flake8,需先安装:pip install flake8)
echo "🔍 运行flake8代码风格校验..."
flake8 --exclude=migrations,settings.py .
if [ $? -ne 0 ]; then
    echo "❌ flake8校验失败!请先修复代码风格问题再提交。"
    exit 1
fi

# 2. 检查未生成的数据库迁移文件
echo "🗄️ 检查是否存在未生成的迁移文件..."
python manage.py makemigrations --check --dry-run
if [ $? -ne 0 ]; then
    echo "❌ 发现未生成的迁移文件!请先执行python manage.py makemigrations。"
    exit 1
fi

# 3. 运行Django测试用例(可选,确保提交代码不破坏现有功能)
echo "🧪 运行Django测试套件..."
python manage.py test
if [ $? -ne 0 ]; then
    echo "❌ 测试用例失败!请修复问题后再提交。"
    exit 1
fi

# 4. 检查生产环境DEBUG模式(关键!避免误开启DEBUG)
echo "🔒 检查settings.py中DEBUG模式状态..."
DEBUG_FLAG=$(grep -n "DEBUG = True" settings.py)
if [ ! -z "$DEBUG_FLAG" ]; then
    echo "⚠️ 警告:settings.py中DEBUG模式为True!如果是生产环境提交,请先关闭。"
    # 若要强制阻止生产环境提交,可取消下面的注释
    # exit 1
fi

echo "✅ 所有pre-commit检查通过!可以正常提交啦~"
exit 0

脚本细节说明

  • flake8校验:确保代码符合PEP8规范,避免缩进、命名等常见风格问题。你可以调整--exclude参数来跳过不需要检查的文件或目录。
  • 迁移文件检查:防止忘记生成迁移就提交,导致本地与服务器数据库结构不一致。
  • 测试用例运行:确保提交的代码不会破坏现有功能,如果项目测试用例较多,你可以指定只运行核心模块的测试,比如python manage.py test myapp
  • DEBUG模式检查:生产环境开启DEBUG会带来安全风险,这个检查能帮你避免误操作。

额外小提示

  • 确保你的项目虚拟环境中已经安装了flake8,可以用pip install flake8快速安装。
  • 如果你有其他自定义需求,比如检查前端代码的console.log、或者特定的业务规则,都可以在脚本中添加对应的命令。
  • 要是觉得手动写脚本麻烦,也可以用pre-commit框架(一个Python工具),它有很多现成的Django相关钩子,但手动脚本更灵活,适合轻量需求。

内容的提问来源于stack exchange,提问作者Zorgan

火山引擎 最新活动