2、开发环境搭建:Python虚拟环境配置、Django项目初始化、MySQL数据库安装与配置、Redis缓存服务搭建
说实话,很多新手在学Django时,第一步就栽在环境搭建上。我见过太多人把项目依赖装得乱七八糟,最后跑都跑不起来。今天咱们就把这四件事一次性搞定:Python虚拟环境、Django项目、MySQL数据库、Redis缓存。每一步我都会把坑给你指出来。
2.1 Python虚拟环境配置
为什么要用虚拟环境?说白了,就是为了隔离依赖。你同时做三个项目,一个用Django 3.2,一个用4.0,另一个用5.0。没有虚拟环境,它们会互相打架。我当年刚入行时就吃过这个亏,一个项目升级依赖,结果另一个项目直接崩了。
我个人习惯用 venv,它是Python自带的,不需要额外安装。操作很简单:
# 创建虚拟环境
python -m venv crm_env
# 激活虚拟环境(Windows)
crm_env\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source crm_env/bin/activate
# 看到终端前面多了 (crm_env) 就说明成功了
激活后,你的终端前面会出现 (crm_env) 这个标识。嗯,看到它就对了。
venv 或 .venv。这样一眼就能看到,而且方便在 .gitignore 里统一排除。
接下来安装项目依赖。先升级pip,再装Django和数据库驱动:
pip install --upgrade pip
pip install django==5.0.3
pip install mysqlclient
pip install redis
pip install django-redis
装完后,用 pip freeze 生成依赖清单:
pip freeze > requirements.txt
这样别人拿到你的项目,直接 pip install -r requirements.txt 就能复现环境。我曾经接手过一个项目,连 requirements.txt 都没有,光猜依赖就花了两天。所以这个习惯一定要养成。
2.2 Django项目初始化
虚拟环境准备好了,咱们开始创建Django项目。我个人习惯用 django-admin 命令:
django-admin startproject crm_project
cd crm_project
python manage.py startapp accounts
python manage.py startapp customers
python manage.py startapp sales
这里我创建了三个app:accounts(用户认证)、customers(客户管理)、sales(销售流程)。为什么这么分?你想想看,一个CRM系统核心就是管人、管客户、管销售。分开后代码清晰,后期维护也方便。
创建完后,记得在 settings.py 里注册这些app:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
# ... 其他默认app
'accounts',
'customers',
'sales',
]
然后跑一下迁移,确保基础表能创建:
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000,看到火箭升空页面,说明Django跑起来了。
2.3 MySQL数据库安装与配置
CRM系统数据量大,SQLite扛不住。我建议用MySQL 8.0以上版本。安装过程就不细说了,各系统不一样。咱们重点说配置。
首先,在MySQL里创建一个数据库和用户:
CREATE DATABASE crm_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'crm_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON crm_db.* TO 'crm_user'@'localhost';
FLUSH PRIVILEGES;
为什么要用 utf8mb4?因为真正的UTF-8编码。MySQL的 utf8 其实只支持3字节,存不了emoji。你想想看,客户名字里带个表情符号,直接报错。我曾经就因为这个被客户投诉过。
然后修改Django的 settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm_db',
'USER': 'crm_user',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
改完后重新跑迁移:
python manage.py migrate
如果报错说 mysqlclient 找不到,别慌。Windows上可能需要装个 mysqlclient 的wheel包。macOS上可以用 brew install mysql-client 解决。Linux上 apt install python3-dev default-libmysqlclient-dev 一般就行。
os.getenv('DB_PASSWORD')。这样代码提交到GitHub也不会泄露密码。
2.4 Redis缓存服务搭建
CRM系统里有很多高频查询,比如客户列表、销售看板。每次都查数据库,性能扛不住。Redis就是用来做缓存的,它把数据存在内存里,读取速度比MySQL快几个数量级。
安装Redis也很简单:
# macOS
brew install redis
# Ubuntu/Debian
sudo apt install redis-server
# Windows
# 去 https://github.com/microsoftarchive/redis/releases 下载安装包
启动Redis服务:
redis-server
验证一下是否启动成功:
redis-cli ping
# 返回 PONG 就对了
然后在Django里配置缓存。打开 settings.py:
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
# 同时配置session存储到Redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
这里我把session也存到了Redis里。为什么?因为默认的session存在数据库里,每次请求都要查一次表。存到Redis后,速度提升很明显。我在一个日活10万的项目里做过测试,页面加载时间从800ms降到了200ms。
LOCATION 配成了 redis://127.0.0.1:6379/0,结果和别的项目冲突了。建议每个项目用不同的db编号,比如项目A用db0,项目B用db1。这样互不干扰。
最后验证一下Redis是否正常工作:
python manage.py shell
在shell里输入:
from django.core.cache import cache
cache.set('test_key', 'hello crm', 60)
print(cache.get('test_key')) # 应该输出 hello crm
如果输出 hello crm,说明Redis配置成功了。
小结
到这步,咱们的开发环境就搭好了。总结一下:
- 虚拟环境:用
venv隔离依赖,生成requirements.txt - Django项目:创建项目、app,跑通基础迁移
- MySQL数据库:建库建用户,配置
utf8mb4编码 - Redis缓存:安装启动,配置缓存和session存储
下一章咱们开始设计数据库模型。说白了,就是设计表结构。CRM系统的核心就是客户、联系人、销售机会这些表。我会带着你一步步建好,顺便讲讲字段设计里的那些坑。