1. Django项目初始化后的基础配置优化
刚完成Django项目的创建和基础环境搭建后,有几个关键配置项需要立即调整,这对后续开发效率和项目规范性至关重要。作为使用Django多年的开发者,我总结出以下几个必做的初始化配置步骤。
1.1 时区与本地化设置
在新建的Django项目中,默认时区是UTC,语言是英文。对于国内开发者来说,首先应该修改这两个配置。打开项目根目录下的settings.py文件,找到以下两个配置项:
python复制# 原配置
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
# 修改为
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
这里有几个需要注意的技术细节:
zh-hans表示简体中文,Django内置了常见语言的翻译文件- 时区设置使用IANA时区数据库中的标识符,中国标准时间是'Asia/Shanghai'
- 修改后需要确保USE_I18N和USE_L10N设置为True(默认就是True)
提示:时区设置会影响数据库中的时间戳存储,建议在项目初期就正确配置,避免后期数据迁移的麻烦。
1.2 静态文件与媒体文件配置
虽然这不是启动后的立即需求,但提前配置好可以避免后续开发中的路径问题。在settings.py中添加:
python复制STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
然后在项目根目录创建对应的文件夹:
bash复制mkdir static media
2. 数据库配置与管理
2.1 创建并配置数据库
Django默认使用SQLite数据库,但对于生产环境或复杂项目,建议使用PostgreSQL或MySQL。以下是MySQL的配置示例:
- 首先在MySQL中创建数据库:
sql复制CREATE DATABASE myproject CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 在settings.py中修改DATABASES配置:
python复制DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'USER': 'your_username',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
}
}
}
- 安装MySQL客户端驱动:
bash复制pip install mysqlclient
注意:使用utf8mb4字符集可以支持完整的Unicode字符(包括emoji),避免未来可能出现的字符存储问题。
2.2 数据库迁移
配置好数据库后,执行初始迁移:
bash复制python manage.py migrate
这个命令会创建Django内置应用(如auth、sessions等)需要的数据库表。
3. 开发环境优化配置
3.1 调试工具配置
强烈建议在开发环境中安装Django Debug Toolbar,它提供了丰富的调试信息:
- 安装:
bash复制pip install django-debug-toolbar
- 在settings.py中添加配置:
python复制INSTALLED_APPS = [
# ...
'debug_toolbar',
]
MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
INTERNAL_IPS = ['127.0.0.1']
- 在urls.py中添加URL配置:
python复制from django.urls import include, path
urlpatterns = [
# ...
path('__debug__/', include('debug_toolbar.urls')),
]
3.2 环境变量管理
永远不要将敏感信息(如数据库密码、API密钥)直接写在settings.py中。推荐使用python-dotenv管理环境变量:
- 安装:
bash复制pip install python-dotenv
- 在项目根目录创建.env文件:
code复制DB_NAME=myproject
DB_USER=username
DB_PASSWORD=password
DB_HOST=localhost
SECRET_KEY=your_secret_key_here
- 修改settings.py读取环境变量:
python复制from dotenv import load_dotenv
load_dotenv()
SECRET_KEY = os.getenv('SECRET_KEY')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': '3306',
}
}
重要:确保将.env添加到.gitignore文件中,避免将敏感信息提交到版本控制。
4. 虚拟环境与依赖管理
4.1 虚拟环境最佳实践
虽然你已经创建了虚拟环境,但有几个细节需要注意:
- 创建虚拟环境时使用:
bash复制python -m venv venv --prompt="myproject"
--prompt参数会在命令行提示符中显示项目名称,避免在多项目开发时混淆。
- 激活虚拟环境:
- Windows:
bash复制venv\Scripts\activate
- macOS/Linux:
bash复制source venv/bin/activate
- 安装项目依赖:
bash复制pip install django mysqlclient django-debug-toolbar python-dotenv
4.2 依赖管理
使用requirements.txt管理项目依赖:
- 生成requirements.txt:
bash复制pip freeze > requirements.txt
- 安装依赖:
bash复制pip install -r requirements.txt
更高级的做法是使用pip-tools管理依赖:
- 创建requirements.in文件,只包含直接依赖:
code复制django
mysqlclient
django-debug-toolbar
python-dotenv
- 编译生成requirements.txt:
bash复制pip-compile requirements.in
- 同步安装:
bash复制pip-sync
这种方法可以精确控制依赖版本,避免依赖冲突。
5. 项目结构与代码组织
5.1 合理的项目结构
建议采用以下项目结构:
code复制myproject/
├── .env
├── .gitignore
├── manage.py
├── requirements.txt
├── media/
├── static/
├── venv/
└── myproject/
├── __init__.py
├── settings/
│ ├── __init__.py
│ ├── base.py
│ ├── development.py
│ └── production.py
├── urls.py
└── wsgi.py
将settings.py拆分为多个环境特定的配置文件:
- base.py - 通用配置
- development.py - 开发环境配置
- production.py - 生产环境配置
使用DJANGO_SETTINGS_MODULE环境变量指定当前使用的配置文件:
bash复制export DJANGO_SETTINGS_MODULE=myproject.settings.development
5.2 应用组织
对于大型项目,建议将功能拆分为多个Django应用:
bash复制python manage.py startapp users
python manage.py startapp products
python manage.py startapp orders
每个应用应该专注于单一功能,通过清晰的接口与其他应用交互。
6. 开发工作流优化
6.1 自定义管理命令
创建自定义管理命令可以简化重复性任务。例如,创建初始化开发环境的命令:
- 在任意app中创建management/commands目录结构:
code复制myapp/
├── management/
│ ├── __init__.py
│ └── commands/
│ ├── __init__.py
│ └── initdev.py
- 编写initdev.py:
python复制from django.core.management.base import BaseCommand
import os
class Command(BaseCommand):
help = 'Initialize development environment'
def handle(self, *args, **options):
# 创建必要目录
os.makedirs('media/uploads', exist_ok=True)
os.makedirs('static/css', exist_ok=True)
# 执行数据库迁移
from django.core.management import call_command
call_command('migrate')
self.stdout.write(self.style.SUCCESS('Development environment initialized'))
- 使用命令:
bash复制python manage.py initdev
6.2 自动化测试配置
配置基本的测试环境:
- 在settings.py中添加测试配置:
python复制if 'test' in sys.argv:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
- 创建基础测试用例:
python复制from django.test import TestCase
class BaseTestCase(TestCase):
@classmethod
def setUpTestData(cls):
# 初始化测试数据
pass
- 运行测试:
bash复制python manage.py test
7. 常见问题与解决方案
7.1 数据库连接问题
问题:无法连接到MySQL数据库,出现"Access denied"错误
解决方案:
- 检查MySQL用户权限:
sql复制GRANT ALL PRIVILEGES ON myproject.* TO 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
- 确保MySQL服务正在运行:
bash复制sudo service mysql status
- 检查防火墙设置,确保3306端口开放
7.2 时区显示不正确
问题:虽然设置了TIME_ZONE = 'Asia/Shanghai',但后台显示的时间仍然不对
解决方案:
- 确保USE_TZ = True(默认值)
- 数据库中的时间戳应该存储为UTC,显示时Django会自动转换
- 在模板中显示时间时使用时区过滤器:
html复制{{ value|timezone:"Asia/Shanghai" }}
7.3 静态文件无法加载
问题:开发服务器无法找到静态文件
解决方案:
- 确保DEBUG = True
- 在urls.py中添加静态文件URL配置:
python复制from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
- 运行collectstatic命令:
bash复制python manage.py collectstatic
8. 开发效率提升技巧
8.1 使用django-extensions
django-extensions提供了许多有用的开发工具:
- 安装:
bash复制pip install django-extensions
- 添加到INSTALLED_APPS:
python复制INSTALLED_APPS += ['django_extensions']
- 常用功能:
- 增强的shell:
python manage.py shell_plus - 自动重新加载开发服务器:
python manage.py runserver_plus --noreload - 生成UML图:
python manage.py graph_models -a -o myapp_models.png
8.2 配置IDE支持
对于PyCharm用户:
- 配置Django支持:File > Settings > Languages & Frameworks > Django
- 启用Django模板语言支持
- 配置Python解释器指向虚拟环境
对于VS Code用户:
- 安装Python和Django扩展
- 配置launch.json:
json复制{
"version": "0.2.0",
"configurations": [
{
"name": "Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": ["runserver"],
"django": true
}
]
}
8.3 使用pre-commit钩子
自动化代码质量检查:
- 安装pre-commit:
bash复制pip install pre-commit
- 创建.pre-commit-config.yaml:
yaml复制repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: debug-statements
- repo: https://github.com/psf/black
rev: 22.3.0
hooks:
- id: black
- 安装钩子:
bash复制pre-commit install
9. 生产环境准备
虽然项目刚启动,但提前考虑生产环境配置可以避免后期重构:
9.1 安全配置
在生产环境的settings.py中:
python复制DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
9.2 性能优化
- 配置缓存:
python复制CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
}
}
- 数据库连接池:
python复制DATABASES['default']['OPTIONS'] = {
'init_command': 'SET default_storage_engine=INNODB',
'charset': 'utf8mb4',
'pool_size': 20,
'max_overflow': 30,
'pool_timeout': 30,
}
9.3 部署准备
- 创建生产环境requirements-prod.txt:
bash复制pip freeze | grep -v 'pkg-resources==0.0.0' > requirements-prod.txt
- 配置Gunicorn:
python复制# gunicorn.conf.py
workers = 3
worker_class = 'gunicorn.workers.gthread.ThreadWorker'
threads = 3
bind = '0.0.0.0:8000'
max_requests = 1000
max_requests_jitter = 50
timeout = 30
- 配置Nginx:
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /path/to/your/static/;
expires 30d;
}
location /media/ {
alias /path/to/your/media/;
expires 30d;
}
}
10. 持续集成与部署
10.1 GitHub Actions配置
创建.github/workflows/django.yml:
yaml复制name: Django CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
env:
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_NAME: test_db
DB_USER: root
DB_PASSWORD: root
run: |
python manage.py test
10.2 Docker配置
创建Dockerfile:
dockerfile复制FROM python:3.9-slim
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "--config", "gunicorn.conf.py", "myproject.wsgi:application"]
创建docker-compose.yml:
yaml复制version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DJANGO_SETTINGS_MODULE=myproject.settings.production
depends_on:
- redis
- db
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: myproject
MYSQL_ROOT_PASSWORD: mypassword
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
11. 项目文档与知识管理
11.1 项目文档结构
建议的文档结构:
code复制docs/
├── ARCHITECTURE.md
├── DEVELOPMENT.md
├── API.md
├── DEPLOYMENT.md
└── TROUBLESHOOTING.md
11.2 使用Sphinx生成文档
- 安装Sphinx:
bash复制pip install sphinx sphinx-rtd-theme
- 初始化文档:
bash复制sphinx-quickstart docs
- 配置conf.py:
python复制extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.viewcode',
'sphinx.ext.napoleon'
]
html_theme = 'sphinx_rtd_theme'
- 编写文档后生成HTML:
bash复制cd docs && make html
12. 团队协作规范
12.1 Git工作流
推荐使用Git Flow:
- 主分支:main/production - 生产环境代码
- 开发分支:develop - 集成开发代码
- 功能分支:feature/* - 新功能开发
- 修复分支:hotfix/* - 紧急修复
12.2 代码审查清单
代码提交前检查:
- [ ] 代码符合PEP 8规范
- [ ] 有适当的单元测试
- [ ] 文档已更新
- [ ] 迁移文件已生成(如适用)
- [ ] 静态文件已收集(如适用)
12.3 Django代码风格指南
- 模型类使用大驼峰命名:
class UserProfile(models.Model) - 视图函数使用小写加下划线:
def user_detail(request, user_id) - URL模式使用小写加连字符:
path('user-profile/', views.user_profile) - 模板文件使用小写加下划线:
user_detail.html
13. 性能监控与优化
13.1 配置Django Silk
Django Silk是一个性能分析工具:
- 安装:
bash复制pip install django-silk
- 配置settings.py:
python复制MIDDLEWARE = [
'silk.middleware.SilkyMiddleware',
# ...
]
INSTALLED_APPS += ['silk']
- 添加URL:
python复制urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]
- 运行迁移:
bash复制python manage.py migrate
python manage.py collectstatic
13.2 数据库查询优化
- 使用select_related和prefetch_related:
python复制# 不好
books = Book.objects.all()
for book in books:
print(book.author.name) # 每次循环都会查询数据库
# 好
books = Book.objects.select_related('author').all()
- 使用annotate代替多个查询:
python复制from django.db.models import Count
# 不好
categories = Category.objects.all()
for category in categories:
print(category.product_set.count())
# 好
categories = Category.objects.annotate(product_count=Count('product'))
- 使用only和defer限制字段:
python复制# 只获取需要的字段
users = User.objects.only('username', 'email')
# 延迟加载大字段
products = Product.objects.defer('description')
14. 安全最佳实践
14.1 防范常见漏洞
- SQL注入:始终使用ORM或参数化查询
- XSS:使用Django模板自动转义,或使用
mark_safe谨慎处理 - CSRF:确保所有修改操作使用POST请求和CSRF token
- 点击劫持:配置中间件:
python复制MIDDLEWARE += ['django.middleware.clickjacking.XFrameOptionsMiddleware']
14.2 密码安全
- 使用强密码哈希:
python复制PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
]
- 密码复杂度要求:
python复制AUTH_PASSWORD_VALIDATORS = [
{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': {'min_length': 12}},
{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
]
14.3 定期安全审计
- 使用django-check-sec:
bash复制pip install django-check-sec
python manage.py checksecure
- 检查依赖漏洞:
bash复制pip install safety
safety check
- 使用OWASP ZAP进行渗透测试
15. 项目维护与升级
15.1 依赖更新策略
- 定期检查更新:
bash复制pip list --outdated
- 测试更新:
bash复制pip install -U package-name
python manage.py test
- 使用依赖版本约束:
code复制Django>=3.2,<4.0
15.2 Django版本升级
- 阅读发布说明和弃用警告
- 在测试环境逐步升级
- 使用
python -Wa manage.py test显示所有警告 - 更新兼容的第三方包
15.3 数据迁移策略
- 备份数据库
- 测试迁移脚本
- 分阶段部署
- 准备回滚方案
16. 扩展与定制
16.1 自定义用户模型
即使项目初期不需要额外字段,也建议从一开始就使用自定义用户模型:
- 创建自定义用户模型:
python复制from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=20, blank=True)
class Meta:
db_table = 'auth_user'
- 在settings.py中配置:
python复制AUTH_USER_MODEL = 'myapp.User'
16.2 多语言支持
即使项目初期只支持中文,配置多语言支持也很简单:
- 在settings.py中:
python复制USE_I18N = True
USE_L10N = True
LANGUAGES = [
('zh-hans', '简体中文'),
('en', 'English'),
]
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
- 标记翻译字符串:
python复制from django.utils.translation import gettext as _
message = _('Welcome to our site')
- 生成翻译文件:
bash复制python manage.py makemessages -l en
- 编译翻译:
bash复制python manage.py compilemessages
17. 第三方服务集成
17.1 邮件服务配置
- 在settings.py中配置:
python复制EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.yourprovider.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your@email.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
DEFAULT_FROM_EMAIL = 'your@email.com'
- 发送测试邮件:
python复制from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'from@example.com',
['to@example.com'],
fail_silently=False,
)
17.2 文件存储服务
对于生产环境,建议使用云存储:
- 安装django-storages:
bash复制pip install django-storages boto3
- 配置Amazon S3:
python复制DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = 'your-access-key'
AWS_SECRET_ACCESS_KEY = 'your-secret-key'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'your-region'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
18. 项目脚手架工具
18.1 使用cookiecutter-django
对于新项目,可以使用cookiecutter-django生成更完整的项目结构:
- 安装cookiecutter:
bash复制pip install cookiecutter
- 生成项目:
bash复制cookiecutter https://github.com/cookiecutter/cookiecutter-django
- 回答交互式问题创建项目
18.2 自定义项目模板
创建自己的项目模板:
- 创建模板结构:
code复制my-template/
├── {{cookiecutter.project_slug}}/
│ ├── __init__.py
│ ├── settings.py
│ └── urls.py
└── cookiecutter.json
- 定义cookiecutter.json:
json复制{
"project_name": "My Project",
"project_slug": "{{ cookiecutter.project_name.lower().replace(' ', '_') }}",
"author": "Your Name",
"description": "A short description of the project."
}
- 使用模板:
bash复制cookiecutter path/to/my-template
19. 测试策略与覆盖率
19.1 测试金字塔实施
- 单元测试:测试独立函数和方法
- 集成测试:测试组件交互
- 端到端测试:测试完整工作流
19.2 配置pytest
- 安装:
bash复制pip install pytest pytest-django pytest-cov
- 创建pytest.ini:
ini复制[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings
python_files = tests.py test_*.py *_tests.py
addopts = --cov=myproject --cov-report=html
- 编写测试:
python复制import pytest
from django.urls import reverse
@pytest.mark.django_db
def test_homepage(client):
response = client.get(reverse('home'))
assert response.status_code == 200
- 运行测试:
bash复制pytest
19.3 覆盖率报告
- 生成报告:
bash复制pytest --cov-report=html
-
查看htmlcov/index.html
-
设置覆盖率阈值:
ini复制[pytest]
cov_fail_under = 90
20. 项目健康度监控
20.1 日志配置
在settings.py中配置:
python复制LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
20.2 健康检查端点
- 安装:
bash复制pip install django-health-check
- 配置:
python复制INSTALLED_APPS += [
'health_check',
'health_check.db',
'health_check.cache',
'health_check.storage',
]
urlpatterns += [
path('health/', include('health_check.urls')),
]
- 访问/health/查看系统状态
20.3 性能监控
配置Sentry监控错误:
- 安装:
bash复制pip install sentry-sdk
- 配置:
python复制import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="your-dsn-here",
integrations=[DjangoIntegration()],
traces_sample_rate=1.0,
send_default_pii=True
)
21. 项目文档自动化
21.1 API文档生成
使用drf-yasg生成Swagger文档:
- 安装:
bash复制pip install drf-yasg
- 配置urls.py:
python复制from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="API Docs",
default_version='v1',
),
public=True,
)
urlpatterns += [
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0)),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0)),
]
21.2 自动化文档部署
使用Read the Docs:
- 创建.readthedocs.yml:
yaml复制version: 2
sphinx:
configuration: docs/conf.py
python:
version: 3.9
install:
- method: pip
path: .
- 连接GitHub仓库到Read the Docs
22. 本地开发环境优化
22.1 配置开发脚本
创建Makefile简化常用命令:
makefile复制.PHONY: run migrate test shell
run:
python manage.py runserver
migrate:
python manage.py migrate
test:
pytest
shell:
python manage.py shell_plus
22.2 使用django-browser-reload
自动刷新浏览器:
- 安装:
bash复制pip install django-browser-reload
- 配置:
python复制INSTALLED_APPS += ['django_browser_reload']
MIDDLEWARE += ['django_browser_reload.middleware.BrowserReloadMiddleware']
urlpatterns += [path("__reload__/", include("django_browser_reload.urls"))]
22.3 配置开发环境变量
创建.env.dev:
code复制DEBUG=True
SECRET_KEY=dev-secret-key
DB_NAME=dev_db
DB_USER=dev_user
DB_PASSWORD=dev_password
使用django-dotenv自动加载:
python复制# settings.py
from dotenv import load_dotenv
load_dotenv('.env.dev')
23. 前端集成策略
23.1 静态资源构建
配置Webpack或Vite:
- 安装:
bash复制npm install --save-dev webpack webpack-cli
- 创建webpack.config.js:
javascript复制const path = require('path');
module.exports = {
entry: './static_src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'static/dist'),
},
};
- 添加构建脚本:
json复制{
"scripts": {
"build": "webpack --mode production",
"dev": "webpack --watch --mode development"
}
}
23.2 Django与前端框架集成
对于Vue/React集成:
- 配置模板:
html复制{% load static %}
<div id="app"></div>
<script src="{% static 'dist/main.js' %}"></script>
- 处理API请求:
javascript复制axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'
23.3 热模块替换配置
配置Vite HMR:
- 安装Vite:
bash复制npm create vite@latest frontend --template vue
- 配置Django开发服务器代理:
python复制from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
urlpatterns += [
path('__vite_ping', lambda r: HttpResponse()),
]
24. 项目交接与知识传承
24.1 交接文档要点
- 系统架构图
- 部署流程
- 运维手册
- 常见问题解决方案
- 联系人列表
24.2 代码审查会议
- 架构设计回顾
- 关键算法讲解
- 特殊实现说明
- 技术债务说明
24.3 培训新成员
- 环境搭建指南
- 开发工作流演示
- 代码风格讲解
- 测试策略说明
25. 项目复盘与改进
25.1 技术回顾会议
- 成功经验总结
- 遇到的问题与解决方案
- 技术决策评估
- 改进计划制定
25.2 指标评估
- 代码质量指标
- 测试覆盖率
- 部署频率
- 平均修复时间
25.3 持续改进计划
- 技术债务清理
- 架构优化
- 流程改进
- 技能提升
26. 社区参与与开源贡献
26.1 参与Django社区
- 参加本地Meetup
- 贡献文档
- 报告问题
- 提交补丁
26.2 开源项目维护
- 清晰的README
- 完善的文档
- 贡献指南
- 行为准则
26.3 技术博客写作
- 项目经验分享
- 技术难点解析
- 最佳实践总结
- 教程创作
27. 职业发展与技能提升
27.1 Django高级特性
- 异步视图
- 自定义中间件
- 数据库路由
- 多租户架构
27.2 相关技术扩展
- Django REST framework
- Django Channels
- Django CMS
- Wagtail
27.3 架构设计能力
- 微服务架构
- 领域驱动设计
- 事件驱动架构
- CQRS模式
28. 项目启动后的心理准备
28.1 应对技术挑战
- 保持学习心态
- 合理评估技术风险
- 建立支持网络
- 分阶段解决问题