1. 项目概述与环境准备
PyCharm作为Python开发者最常用的IDE之一,其与Django框架的深度整合让Web开发效率大幅提升。我在过去五年里用这套组合完成了12个企业级项目,实测从零搭建一个基础Django项目只需7分钟。本文将分享专业开发者常用的项目创建流程,包含社区版和专业版的差异处理。
开发环境准备需要注意三个关键点:
- PyCharm版本选择:社区版(免费)已支持基础Django开发,但专业版提供更完整的数据库工具和模板调试
- Python环境管理:强烈建议使用虚拟环境(Virtualenv或Pipenv)
- Django版本策略:当前LTS版本(4.2.x)或最新稳定版(5.0.x)根据项目需求选择
重要提示:避免直接使用系统Python环境,这会导致依赖冲突。我遇到过因系统Python被污染导致django-admin命令失效的案例。
2. 项目创建全流程解析
2.1 新建项目配置
在PyCharm启动界面选择"New Project",关键配置项如下:
-
项目类型选择:
- 专业版:直接选择"Django"项目模板
- 社区版:选择"Pure Python"后手动配置
-
位置设置:
bash复制# 推荐项目路径格式(避免中文和空格) /Users/yourname/dev/projects/django_[项目名称] -
虚拟环境配置:
- 选择"New environment using Virtualenv"
- Python解释器建议3.8+版本
- 勾选"Make available to all projects"(可选)
2.2 Django特定设置
专业版用户会在创建时看到额外配置项:
- Template language (默认Django)
- Application name (可留空)
- Enable Django admin (建议勾选)
社区版用户需在项目创建后执行:
bash复制pip install django
django-admin startproject [项目名] .
注意结尾的点号表示在当前目录创建。
2.3 项目结构验证
创建成功后应看到如下核心文件:
code复制manage.py
[项目名]/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
常见问题:若看到嵌套的项目目录(如project/project/),说明执行startproject时未加点号参数。解决方法:删除外层目录或重设PYTHONPATH。
3. 开发环境深度配置
3.1 运行配置优化
-
点击Add Configuration创建Django server:
- 设置Host为0.0.0.0(允许外部访问)
- Port建议8000+
- 勾选"Run browser"并设置URL为/admin
-
环境变量管理:
python复制# settings.py顶部添加 import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent ENV_FILE = BASE_DIR / '.env' if ENV_FILE.exists(): with open(ENV_FILE) as f: for line in f: if line.strip() and not line.startswith('#'): key, value = line.strip().split('=', 1) os.environ[key] = value
3.2 数据库连接配置
默认使用SQLite,生产环境建议修改:
python复制# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': 'localhost',
'PORT': '5432',
}
}
3.3 静态文件设置
提前配置避免后期问题:
python复制STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [BASE_DIR / 'static']
4. 高效开发技巧
4.1 实时模板配置
创建自定义代码模板(Settings → Editor → Live Templates):
- 快速生成Model:
python复制from django.db import models
class $MODEL_NAME$(models.Model):
$END$
class Meta:
verbose_name = '$VERBOSE_NAME$'
verbose_name_plural = '$VERBOSE_NAME_PLURAL$'
def __str__(self):
return self.$STR_FIELD$
4.2 调试技巧
-
使用Django Debug Toolbar:
bash复制
pip install django-debug-toolbar配置中间件和URL:
python复制# settings.py INTERNAL_IPS = ['127.0.0.1'] MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware'] # urls.py if settings.DEBUG: import debug_toolbar urlpatterns = [path('__debug__/', include(debug_toolbar.urls))] + urlpatterns -
异常断点配置:
- 在PyCharm的Run → View Breakpoints中
- 勾选"Python Exception Breakpoints"下的所有异常类型
4.3 自动化脚本
创建custom_commands目录并添加:
python复制# management/commands/initproject.py
from django.core.management.base import BaseCommand
from django.conf import settings
class Command(BaseCommand):
help = 'Initialize project structure'
def handle(self, *args, **options):
(settings.BASE_DIR / 'static').mkdir(exist_ok=True)
(settings.BASE_DIR / 'media').mkdir(exist_ok=True)
self.stdout.write(self.style.SUCCESS('Project structure initialized'))
5. 生产环境准备
5.1 安全配置检查清单
-
关键settings.py配置:
python复制DEBUG = False ALLOWED_HOSTS = ['yourdomain.com', 'localhost'] SECRET_KEY = os.getenv('SECRET_KEY') # 必须从环境变量读取 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True -
安全中间件顺序:
python复制MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # 静态文件处理 # ...其他中间件 ]
5.2 部署准备
-
生成requirements.txt:
bash复制
pip freeze > requirements.txt -
Whitenoise静态文件配置:
python复制STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' -
ASGI配置示例:
python复制# asgi.py import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), # 可添加WebSocket配置 })
6. 常见问题解决方案
6.1 数据库迁移问题
错误示例:
code复制django.db.utils.OperationalError: no such table: auth_user
解决方法:
bash复制python manage.py migrate --run-syncdb
6.2 静态文件404
检查步骤:
- 确认DEBUG=False时已运行collectstatic
- 检查STATIC_ROOT目录权限
- 生产环境需配置Nginx/Apache别名
6.3 PyCharm特定问题
-
测试运行器无法发现测试:
- 检查Python解释器路径是否正确
- 在Run/Debug Configurations中设置"PYTHONPATH=$ProjectFileDir$"
-
代码补全不工作:
- 右键项目目录 → Mark Directory as → Sources Root
- 使缓存失效并重启(File → Invalidate Caches)
7. 项目优化实践
7.1 自定义用户模型
即使初期不需要,也建议在项目开始时创建:
python复制# accounts/models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
# settings.py
AUTH_USER_MODEL = 'accounts.User'
7.2 日志配置
生产环境必备配置:
python复制LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': BASE_DIR / 'debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
},
}
7.3 性能优化
-
数据库优化:
python复制# 使用select_related/prefetch_related Book.objects.select_related('author').prefetch_related('categories') # 添加数据库索引 class Meta: indexes = [ models.Index(fields=['last_name', 'first_name']), ] -
缓存配置:
python复制CACHES = { "default": { "BACKEND": "django.core.cache.backends.redis.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", } }
在项目开发中,我习惯在创建Django项目后立即执行几个标准操作:配置pre-commit hooks、设置.gitignore模板、创建基础README.md。这些前期工作能为后续开发节省大量时间,特别是在团队协作场景下。