☰
Day 02 | 把开发环境一次搭对:Python+Django+DRF+MySQL+Redis 配置骨架与 TaoToken 接入
2026/9/28 4:20:49 网站建设 项目流程

1. 为什么你的 Django 环境总是“我电脑上能跑”

如果你正在搜 Python+Django+DRF+MySQL+Redis 这套后端环境怎么搭,大概率已经踩过下面这些坑:MySQL 装完字符集是 latin1,存个中文全是问号;Redis 装好了,Django 里ConnectionError: Error 111 connecting to localhost:6379;Python 版本一升级,Django 直接报ImportError;最要命的是同事拉你代码,报错三屏,你只能回一句“我电脑上能跑啊”。

这套组合本身没问题,问题出在“环境不统一”。MySQL 和 Redis 是外部服务,版本、字符集、端口、密码任何一项对不上,Django 就连不上。所以这篇不讲虚的,直接给你一份可复制的依赖清单、docker-compose.yml、settings.py骨架,以及逐条验证命令。目标很明确:20 分钟内,浏览器看到 Django 火箭页面,MySQL 和 Redis 都能 ping 通。

适合谁看:刚学完 Python 基础、准备做第一个 Django API 项目的人;被环境问题卡过一下午的人;想用 Docker 把数据库锁死、不再污染本机的人。整篇按“先起服务、再连框架、最后接 AI 通道”的顺序走,每一步都有验证命令,跑不通就停在那一节排查,别往下跳。

2. 动手前先理清:谁管谁,装在哪

先花两分钟把组件关系搞清楚,不然就是盲目复制粘贴。你的电脑是宿主机,浏览器访问本地运行的 Django(端口 8000),Django 再去连 Docker 里的 MySQL(3306)和 Redis(6379)。Python 和 Django 跑在本机,调试方便、改代码快;MySQL 和 Redis 关进容器,版本和配置写死在文件里,谁拿到都一样。

组件作用为什么选它
Python 3.11编程语言本体与 Django 4.2 搭配稳定,性能比 3.10 有明显提升
Django 4.2Web 框架LTS 长期支持版,官方维护周期长,稳
DRF 3.14写 API 的框架Django 生态最成熟的 REST 方案,做前后端分离必备
MySQL 8.0关系型数据库存商品、订单、用户,标准选择
Redis 7缓存 + 会话购物车、验证码、session,读写快
Docker Compose容器编排一条命令拉起 MySQL + Redis,不污染本机

一句话:Python + Django 是你写代码的地方,MySQL 存数据,Redis 加速访问,Docker 把这两个外部服务一键搞定。理清这层关系,后面配置里每个参数你都知道它在连谁。

3. TaoToken 前置:统一 Key 与 API 通道怎么接

环境搭好后,下一步是让 AI 编辑器能帮你写 Django 代码。这里我用 TaoToken 作为统一的模型调用通道,官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。它的作用是:你申请一个 Key,就能通过统一的 API 通道调用模型,不用在多个平台之间来回切换配置。

接入前先做两件事。第一,注册并登录后进入控制台,在 API Keys 页面创建一个 Key,复制保存好,后面配置里要用。第二,确认你要用的模型名称,模型对话页面能看到当前可用的模型列表。如果你打算长期用 AI 辅助编码、跑 Agent 任务,可以看下 Coding Plan 页面,按需选择;只是临时验证模型能不能通,用模型对话就够了。

注意:Key 只存在服务端或本地.env文件里,绝对不要硬编码进settings.py或提交到 Git。这是接入任何 API 通道的第一条纪律。

拿到 Key 之后,你的 Django 项目里可以把它当成一个普通的 HTTP 服务来调用。下面这节先给环境配置骨架,再给 TaoToken 的接入片段,顺序别乱:环境不通,接什么都白搭。

4. 可复制配置:从 Docker 到 settings.py 骨架

4.1 Docker Compose 拉起 MySQL 8.0 + Redis 7

项目根目录创建docker-compose.yml,这是今天最核心的文件:

services: mysql: image: mysql:8.0 container_name: day02_mysql restart: unless-stopped ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: mall_db MYSQL_USER: mall_user MYSQL_PASSWORD: mall123 TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: day02_redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 volumes: mysql_data: redis_data:

启动并确认状态:

docker compose up -d docker compose ps

两个服务都应该是running (healthy)。如果 MySQL 一直显示starting,等 10 到 20 秒,健康检查通过后会变 healthy。测试连接:

docker exec -it day02_mysql mysql -umall_user -pmall123 -e "SELECT 1;" docker exec -it day02_redis redis-cli ping

期望输出分别是1和PONG。看到这两个结果,数据库层就通了。

4.2 虚拟环境与依赖清单

python3 -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install django==4.2.* djangorestframework==3.14.* \ mysqlclient==2.2.* redis==5.0.* \ django-cors-headers==4.3.* python-dotenv==1.0.* pip freeze > requirements.txt

各包作用:django框架本体;djangorestframework写 API;mysqlclient连 MySQL 的驱动;redis操作 Redis 的客户端;django-cors-headers解决前后端分离跨域;python-dotenv读.env,密码不进代码。

4.3 settings.py 骨架与 .env

创建项目:

django-admin startproject core .

根目录建.env:

DB_NAME=mall_db DB_USER=mall_user DB_PASSWORD=mall123 DB_HOST=127.0.0.1 DB_PORT=3306 REDIS_URL=redis://127.0.0.1:6379/0 TAOTOKEN_API_KEY=你的Key TAOTOKEN_BASE_URL=https://taotoken.net/api

core/settings.py里改数据库和缓存:

import os from dotenv import load_dotenv load_dotenv() 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": os.getenv("DB_PORT"), "OPTIONS": {"charset": "utf8mb4"}, } } CACHES = { "default": { "BACKEND": "django.core.cache.backends.redis.RedisCache", "LOCATION": os.getenv("REDIS_URL"), } }

INSTALLED_APPS加入rest_framework、corsheaders;MIDDLEWARE最前面加corsheaders.middleware.CorsMiddleware;开发阶段设CORS_ALLOW_ALL_ORIGINS = True,上线前收紧;LANGUAGE_CODE = "zh-hans"、TIME_ZONE = "Asia/Shanghai"。

4.4 TaoToken 接入片段

在项目里建一个services/ai_client.py,用统一通道调用模型:

import os import requests API_KEY = os.getenv("TAOTOKEN_API_KEY") BASE_URL = os.getenv("TAOTOKEN_BASE_URL") def chat(prompt: str, model: str = "你的模型名") -> str: resp = requests.post( f"{BASE_URL}/v1/chat/completions", headers={"Authorization": f"Bearer {API_KEY}"}, json={"model": model, "messages": [{"role": "user", "content": prompt}]}, timeout=60, ) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"]

这段代码把 Key 从环境变量读进来,通过统一 API 通道发请求。模型名以模型对话页面实际列出的为准,别照抄占位符。

5. 验证请求:从 migrate 到 AI 通道跑通

5.1 数据库迁移与启动

python manage.py migrate python manage.py runserver

浏览器打开http://127.0.0.1:8000/,看到火箭页面说明 Django 和 MySQL 已经连上了。如果 migrate 报Access denied,回去检查.env里的账号密码和docker-compose.yml是否一致。

5.2 验证 Redis 缓存

进入 shell:

python manage.py shell
from django.core.cache import cache cache.set("k", "hello", 30) print(cache.get("k"))

输出hello,说明 Django 已经能读写 Redis。报ConnectionError就检查 Redis 容器是否 healthy、REDIS_URL端口对不对。

5.3 验证 TaoToken 通道

python -c "from services.ai_client import chat; print(chat('用一句话说明 Django 是什么'))"

能打印出模型返回的中文句子,说明 Key、Base URL、模型名三者都对上了。如果返回 401,检查 Key 是否复制完整;返回 404,检查 Base URL 和模型名;超时就把timeout调大或换网络环境重试。

6. 本篇常见错排查

MySQL 容器起不来,日志报different lower_case_table_names:多半是之前用别的配置挂载过同一个数据卷。执行docker compose down -v清掉卷再up -d,注意这会删数据,开发环境无所谓。

migrate 报django.db.utils.OperationalError: (2002):Django 连不到 3306。先docker compose ps确认 MySQL 是 healthy,再确认.env里DB_HOST=127.0.0.1,不是localhost(某些系统下 localhost 会走 socket)。

中文存进去变问号:检查docker-compose.yml里的--character-set-server=utf8mb4和settings.py的OPTIONS: {"charset": "utf8mb4"}是否都在。已经建好的库要重建才生效。

Redis 报Error 111 connecting to localhost:6379:容器没起来或端口没映射。docker exec -it day02_redis redis-cli ping返回 PONG 才算通。

TaoToken 返回 401/403:Key 没读到或写错。在 shell 里print(os.getenv("TAOTOKEN_API_KEY"))确认.env被加载,注意load_dotenv()要在读取之前调用。

pip 装 mysqlclient 失败:Mac 上先brew install mysql-client pkg-config,Ubuntu 上装default-libmysqlclient-dev build-essential,再重试。

7. 环境通了之后,AI 编码通道这样配

环境跑通只是起点。接下来你要用 AI 编辑器写 Django 代码,推荐把 TaoToken 的 Key 配进编辑器或项目级规则里。如果你只是验证模型能不能通,直接去模型对话页面发一条消息最快;如果你要长期用 AI 辅助编码、跑 Agent 任务,去 Coding Plan 页面看下适合的方案;Key 的创建和管理都在 API Keys 页面,接入细节看接入文档。

我自己的习惯是:.env里放 Key,项目根目录放一份 AI 规则文件,写明“Django 4.2 + DRF,Model 字段加 verbose_name,配置从 .env 读,不硬编码密码”。这样 AI 生成的代码直接符合项目规范,省掉反复纠正的功夫。环境一次搭对,后面每天省下的都是实打实的时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询