1. Django项目初始化与环境配置
作为Python生态中最负盛名的全栈式Web框架,Django以其"开箱即用"的特性深受开发者喜爱。但在实际项目启动时,合理的环境配置往往决定了后续开发效率。让我们从零开始搭建一个标准的Django开发环境。
1.1 Python环境准备
Django 4.2+要求Python 3.8及以上版本。推荐使用pyenv管理多版本Python环境:
bash复制# 安装pyenv(Mac/Linux)
curl https://pyenv.run | bash
# 安装指定Python版本
pyenv install 3.10.6
# 创建项目专用环境
pyenv virtualenv 3.10.6 mydjango
cd project_dir
pyenv local mydjango
注意:Windows用户可使用pyenv-win替代,或直接安装官方Python发行版
验证环境:
bash复制python -m pip install --upgrade pip
pip list # 应只显示pip和setuptools两个包
1.2 Django安装与版本选择
当前稳定版(LTS)是Django 4.2,但新项目建议直接安装最新版:
bash复制pip install django
若需指定版本:
bash复制pip install django==4.2.5
验证安装:
bash复制python -m django --version
1.3 项目骨架生成
使用Django admin命令创建项目骨架:
bash复制django-admin startproject myproject
cd myproject
关键目录结构说明:
code复制myproject/
├── manage.py # 项目管理脚本
└── myproject/
├── __init__.py
├── settings.py # 核心配置文件
├── urls.py # 主路由配置
└── wsgi.py # WSGI入口
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 深度配置settings.py
2.1 基础配置项调优
打开myproject/settings.py,这些关键配置需要立即调整:
python复制# 安全配置
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') # 从环境变量读取
DEBUG = False # 生产环境必须关闭
# 国际化
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
# 静态文件
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
2.2 数据库连接配置
以MySQL为例(需先安装mysqlclient包):
python复制DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'dbuser',
'PASSWORD': 'dbpassword',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
}
}
}
提示:开发环境可用SQLite,但生产环境务必使用PostgreSQL/MySQL等专业数据库
2.3 中间件与APP配置
默认MIDDLEWARE已包含常用组件,建议添加:
python复制INSTALLED_APPS = [
...
'django.contrib.humanize', # 人性化过滤器
'django_extensions', # 扩展工具集
'debug_toolbar', # 调试工具栏
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # 静态文件优化
...
]
3. 应用(APP)开发实战
3.1 创建第一个APP
bash复制python manage.py startapp blog
注册APP到settings.py:
python复制INSTALLED_APPS = [
...
'blog.apps.BlogConfig',
]
3.2 模型设计示例
编辑blog/models.py:
python复制from django.db import models
from django.urls import reverse
class Post(models.Model):
STATUS_CHOICES = [
('draft', '草稿'),
('published', '已发布'),
]
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post_detail',
args=[self.publish.year,
self.publish.month,
