第二章:开发环境搭建——工欲善其事,必先利其器
各位同学,咱们正式开始动手了。这一章我带你搭好整套开发环境。别小看这一步,我见过太多项目后期出问题,追根溯源都是环境没配好。你想想看,地基没打牢,房子能稳吗?
2.1 Python虚拟环境配置——隔离才是王道
先说说虚拟环境。说白了,它就是给你的每个项目一个独立的Python解释器空间。为什么需要这个?我举个例子:项目A要用Django 3.2,项目B要用Django 4.0,没有虚拟环境的话,你装一个就得覆盖另一个,乱成一锅粥。
我个人习惯用 venv,Python 3.3以后自带的,不用额外装包。操作很简单:
# 创建虚拟环境
python -m venv agri_env
# 激活(Windows)
agri_env\Scripts\activate
# 激活(Linux/Mac)
source agri_env/bin/activate
# 看到 (agri_env) 前缀就对了
venv 或 .venv。这样一眼就能看到,不会搞混。
激活后,你安装的所有包都会装到这个环境里,不会污染系统Python。我曾经有一次在服务器上直接 pip install,结果把系统自带的Python搞崩了,重装系统才解决。嗯,从那以后我再也不敢偷懒了。
2.2 Django项目初始化——从零到一
虚拟环境激活后,咱们开始装Django。这里有个坑要注意:别装最新版!我建议用LTS版本,比如4.2.x,稳定、文档全、第三方库兼容性好。
# 安装Django
pip install django==4.2.7
# 创建项目
django-admin startproject agri_weather_station
# 进入项目目录
cd agri_weather_station
# 创建应用
python manage.py startapp sensor
python manage.py startapp data_collector
python manage.py startapp alert
项目结构出来后,我习惯先跑一下看看能不能启动:
python manage.py runserver
看到那个小火箭和"It worked!"页面,心里就踏实了。如果报错,八成是端口被占了,换个端口试试:
python manage.py runserver 8080
runserver,那是开发调试用的。后面我会教你怎么用uWSGI+Gunicorn部署。
2.3 MySQL数据库安装与配置——数据的大本营
咱们的气象站数据量不小,SQLite扛不住。MySQL是正经的关系型数据库,稳定、性能好、生态成熟。我建议用MySQL 8.0以上版本。
安装步骤(以Ubuntu为例):
# 安装MySQL
sudo apt update
sudo apt install mysql-server
# 检查状态
sudo systemctl status mysql
# 安全配置
sudo mysql_secure_installation
安装完后,创建咱们的数据库和用户:
# 登录MySQL
sudo mysql -u root -p
# 创建数据库
CREATE DATABASE agri_weather_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建用户并授权
CREATE USER 'agri_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON agri_weather_db.* TO 'agri_user'@'localhost';
FLUSH PRIVILEGES;
utf8mb4,不然存中文或特殊符号会出问题。我踩过这个坑,存了个温度符号"℃",结果直接报错。
接下来配置Django连接MySQL。先装驱动:
pip install mysqlclient
然后在 settings.py 里配置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'agri_weather_db',
'USER': 'agri_user',
'PASSWORD': 'YourStrongPassword123!',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
}
}
}
配置完跑一下迁移,看看能不能连上:
python manage.py migrate
没报错的话,恭喜你,数据库通了。
2.4 Redis缓存服务搭建——给系统装上加速器
气象站的数据采集频率高,如果每次都查数据库,服务器扛不住。Redis就是来解决这个问题的。它是个内存数据库,读写速度是MySQL的几十倍。
安装Redis:
# Ubuntu
sudo apt install redis-server
# 检查是否启动
sudo systemctl status redis
# 测试连接
redis-cli ping
# 返回 PONG 就对了
配置Redis,让它开机自启:
sudo systemctl enable redis
Django这边需要装个包来连接Redis:
pip install django-redis
然后在 settings.py 里配置缓存:
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'PASSWORD': '', # 如果设置了密码就填
'SOCKET_CONNECT_TIMEOUT': 5,
'SOCKET_TIMEOUT': 5,
}
}
}
测试一下缓存是否生效:
python manage.py shell
from django.core.cache import cache
cache.set('test_key', 'Hello Redis!', timeout=60)
print(cache.get('test_key')) # 应该输出 Hello Redis!
2.5 环境验证——确保一切就绪
所有组件装完后,我习惯跑一个完整的验证流程:
- 虚拟环境激活状态确认
- Django项目能正常启动
- MySQL连接正常,能建表、读写数据
- Redis能存能取,响应时间在毫秒级
写个简单的测试脚本:
# test_env.py
import django
import os
import redis
import MySQLdb
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'agri_weather_station.settings')
# 测试Django
print("Django 版本:", django.VERSION)
# 测试MySQL
try:
conn = MySQLdb.connect(host='localhost', user='agri_user',
passwd='YourStrongPassword123!', db='agri_weather_db')
print("MySQL 连接成功")
conn.close()
except Exception as e:
print("MySQL 连接失败:", e)
# 测试Redis
try:
r = redis.Redis(host='127.0.0.1', port=6379, db=1)
r.set('test', 'ok')
print("Redis 连接成功, 值:", r.get('test').decode())
except Exception as e:
print("Redis 连接失败:", e)
好了,环境搭完了。你可能会问:为什么搞这么复杂?直接装个集成环境不香吗?
我的回答是:集成环境确实方便,但出了问题你根本不知道是哪里的锅。自己一步步搭,每个组件都清楚,后面调试、优化、迁移都心里有数。做嵌入式系统的人,最讲究的就是可控性,对吧?
下一章,咱们开始设计数据库模型,把气象站的数据结构理清楚。到时候你就知道,今天搭的环境有多重要了。