HousingRentalManagementSystem

后端说明

后端基于 Django 和 Django REST Framework,提供前台用户接口、后台管理接口、AI 对话接口、日志记录、验证码、上传资源访问和定时任务。

目录结构

server/
├── ai/                     # AI 对话接口
├── myapp/
│   ├── auth/               # token / admin token 认证
│   ├── middlewares/        # 操作日志中间件
│   ├── permission/         # 演示账号等权限判断
│   ├── views/admin/        # 后台管理接口
│   ├── views/index/        # 前台用户接口
│   ├── models.py           # 数据模型
│   ├── serializers.py      # DRF 序列化器
│   ├── tests.py            # 后端测试
│   └── utils.py            # 密码、token、日志、通用工具
├── server/
│   ├── settings.py         # Django 配置
│   └── urls.py             # 总路由
├── upload/                 # 上传资源
├── manage.py
├── requirements.txt
└── run_backend_exe.spec

本地运行

1. 安装依赖

cd server
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

2. 准备数据库

项目默认使用 MySQL:

CREATE DATABASE IF NOT EXISTS HousingRentalManagementSystem
DEFAULT CHARSET utf8
COLLATE utf8_general_ci;

从仓库根目录导入示例 SQL:

mysql -h 127.0.0.1 -u root -p HousingRentalManagementSystem < HousingRentalManagementSystem.sql

3. 设置环境变量

PowerShell 示例:

$env:DJANGO_SECRET_KEY = "local-dev-secret-key"
$env:DJANGO_DEBUG = "true"
$env:DB_ENGINE = "django.db.backends.mysql"
$env:DB_NAME = "HousingRentalManagementSystem"
$env:DB_USER = "root"
$env:DB_PASSWORD = "your-db-password"
$env:DB_HOST = "127.0.0.1"
$env:DB_PORT = "3306"

.env.example 是配置模板,当前项目不会自动加载 .env 文件。请通过 shell、进程管理器、容器编排或托管平台注入环境变量。

4. 启动服务

python manage.py check
python manage.py runserver

默认接口地址为 http://127.0.0.1:8000

环境变量

变量名 默认值 说明
DJANGO_SECRET_KEY unsafe-dev-secret-key-change-me Django 密钥,生产环境必须设置真实值
DJANGO_DEBUG true 是否开启 Debug
DJANGO_ALLOWED_HOSTS * 允许访问的主机,逗号分隔
DJANGO_CSRF_TRUSTED_ORIGINS 本地前端地址 CSRF 可信来源,逗号分隔
CORS_ALLOW_ALL_ORIGINS true 是否允许所有跨域来源
CORS_ALLOWED_ORIGINS 允许跨域来源,逗号分隔
CORS_ALLOW_CREDENTIALS true 是否允许跨域凭据
CSRF_COOKIE_SECURE 非 Debug 时默认 true CSRF Cookie 是否仅 HTTPS
SESSION_COOKIE_SECURE 非 Debug 时默认 true Session Cookie 是否仅 HTTPS
SECURE_SSL_REDIRECT false 是否强制 HTTPS
SECURE_HSTS_SECONDS 0 HSTS 秒数
SECURE_HSTS_INCLUDE_SUBDOMAINS false HSTS 是否包含子域
SECURE_HSTS_PRELOAD false 是否启用 HSTS preload
DB_ENGINE django.db.backends.mysql 数据库引擎
DB_NAME HousingRentalManagementSystem 数据库名
DB_USER root 数据库用户
DB_PASSWORD local-dev-password 数据库密码
DB_HOST 127.0.0.1 数据库主机
DB_PORT 3306 数据库端口
DASHSCOPE_API_KEY AI 对话接口 API Key

生产环境如果设置 DJANGO_DEBUG=false,启动时会强制检查:

数据库维护

当前仓库以 SQL 初始化为主,HousingRentalManagementSystem.sql 是主要示例库文件,MySQLBackup.sql 是备份数据。导入前先确认目标数据库是否已有数据,避免覆盖。

备份:

mysqldump -u root -p HousingRentalManagementSystem > MySQLBackup.sql

删除数据库:

DROP DATABASE IF EXISTS HousingRentalManagementSystem;

如果后续新增或修改模型字段,应先评估是否需要补充 Django migrations 和同步 SQL 文件,避免模型、测试库和示例库漂移。

认证和角色

角色值 角色 说明
1 管理员 可访问后台全部管理功能
2 普通用户 可访问前台用户功能
3 演示账号 可读取后台数据,写操作被限制
4 房东 可访问后台房屋、订单、分类、标签等白名单功能

认证头:

请求头 用途
TOKEN 前台普通用户接口认证
ADMINTOKEN 后台管理接口认证

密码和 token

创建管理员示例:

python manage.py shell -c "from myapp.models import User; from myapp.utils import make_password_hash; User.objects.create(username='admin111', password=make_password_hash('admin111'), role='1', status='0')"

测试

使用默认数据库配置:

python manage.py check
python manage.py test myapp --verbosity=2

使用 SQLite 内存库快速测试:

$env:DB_ENGINE = "django.db.backends.sqlite3"
$env:DB_NAME = ":memory:"
python manage.py test myapp --verbosity=2

CI 会运行管理员认证、演示账号限制、房东白名单、前台对象级权限、用户登录注册、房源、订单、评论等测试。

安全扫描

python -m bandit -r server -x server/myapp/tests.py -ll
python -m pip_audit -r requirements.txt

说明:

EXE 打包

Windows 环境可用 PyInstaller 打包:

cd server
pyinstaller run_backend_exe.spec

产物默认位于 server/dist/。打包前确认 web/public/favicon.ico 存在,并检查 run_backend_exe.spec 中的隐藏导入和图标路径。

部署注意