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跑起来了。

注意: 默认用的是SQLite数据库,咱们后面要换成MySQL。所以现在看到的只是临时效果,别急着往里填数据。

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。

避坑指南: 我曾经把Redis的 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系统的核心就是客户、联系人、销售机会这些表。我会带着你一步步建好,顺便讲讲字段设计里的那些坑。