后端基于 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
cd server
python -m venv .venv
.\.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
项目默认使用 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
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、进程管理器、容器编排或托管平台注入环境变量。
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,启动时会强制检查:
DJANGO_SECRET_KEY 不能使用默认值DJANGO_ALLOWED_HOSTS 不能为 *CORS_ALLOW_ALL_ORIGINS 必须为 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 |
后台管理接口认证 |
UserSerializer 不会把 password、token、admin_token 直接输出到常规响应中;登录接口会按需返回本次生成的 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
说明:
Secret Scan workflow 执行。Windows 环境可用 PyInstaller 打包:
cd server
pyinstaller run_backend_exe.spec
产物默认位于 server/dist/。打包前确认 web/public/favicon.ico 存在,并检查 run_backend_exe.spec 中的隐藏导入和图标路径。
server/upload/ 和 server/myapp/logs/ 需要运行用户具备读写权限。python manage.py runserver,应使用 Gunicorn、uWSGI、systemd、容器或平台托管。