Phase 0 评审修复:init.sh 跨平台兼容 + production SECRET_KEY 强制校验 + 文档同步
This commit is contained in:
+9
-1
@@ -1,5 +1,13 @@
|
|||||||
# Skelet 环境变量示例
|
# Skelet 环境变量示例
|
||||||
# 复制为 .env 并填入真实值;.env 已被 .gitignore 忽略,不会提交
|
#
|
||||||
|
# 本文件不直接加载到 Django settings;部署时需将这些变量注入 shell 环境。
|
||||||
|
# 注入方式取决于运行环境:
|
||||||
|
# - 本地开发(MSYS2 bash): export $(cat .env | xargs) 或手动 export
|
||||||
|
# - systemd (Gunicorn): EnvironmentFile=/path/to/.env
|
||||||
|
# - 托管平台 (VPS hosting): 通过面板或 SSH config 设置环境变量
|
||||||
|
# - Docker: docker run --env-file .env
|
||||||
|
#
|
||||||
|
# 真实 .env 文件已被 .gitignore 忽略,不会提交。
|
||||||
|
|
||||||
# Django 密钥(生产环境必须替换为随机字符串)
|
# Django 密钥(生产环境必须替换为随机字符串)
|
||||||
# 生成方式: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
|
# 生成方式: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ Skelet 是一个介绍、分类、评测开源项目骨架的网站。目标用
|
|||||||
|
|
||||||
## 当前阶段
|
## 当前阶段
|
||||||
|
|
||||||
当前仓库处于 harness 文档初始化阶段,生产代码尚未初始化。
|
Phase 0(地基)已完成。Wagtail 7.4.2 + Django 6.0.6 项目已初始化,生产代码可运行,基础测试基线已建立。
|
||||||
|
|
||||||
下一步从 [`docs/06-tasks.md`](docs/06-tasks.md) 领取 `T-001`:初始化 Wagtail 项目骨架。
|
下一步从 [`docs/06-tasks.md`](docs/06-tasks.md) 领取 `T-101`:建立场景、语言、框架、数据库、功能标签模型。
|
||||||
|
|
||||||
## 开发环境
|
## 开发环境
|
||||||
|
|
||||||
@@ -56,12 +56,10 @@ Skelet 是一个介绍、分类、评测开源项目骨架的网站。目标用
|
|||||||
|
|
||||||
## 验证
|
## 验证
|
||||||
|
|
||||||
当前仓库是文档阶段,生产应用尚不可运行。文档修改后至少检查文件清单和 git 状态,并确认根入口不再误称模板库。
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git status
|
.venv/bin/python3.12 manage.py check
|
||||||
find . -type f -not -path "./.git/*"
|
.venv/bin/python3.12 manage.py test
|
||||||
```
|
```
|
||||||
|
|
||||||
完成 `T-001` 后,必须配置 `init.sh` 的真实命令(`init.ps1` 可选同步),并以后以脚本作为标准启动与验证入口。
|
`init.sh` 是标准启动与验证入口(`init.ps1` 为 Windows 辅助脚本)。
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
1. `pwd`:确认在仓库根目录(标准开发环境为 WSL/Linux,路径 `/mnt/d/opc_project/skelet`)。
|
1. `pwd`:确认在仓库根目录(标准开发环境为 WSL/Linux,路径 `/mnt/d/opc_project/skelet`)。
|
||||||
2. 读 [`../progress.md`](../progress.md) 和 [`current-state.md`](current-state.md)。
|
2. 读 [`../progress.md`](../progress.md) 和 [`current-state.md`](current-state.md)。
|
||||||
3. 运行 `git log --oneline -5`,了解最近提交。
|
3. 运行 `git log --oneline -5`,了解最近提交。
|
||||||
4. 如果 `init.sh` 已配置真实命令,运行标准验证;如果脚本仍是占位,先完成 `T-001`。
|
4. 运行 `init.sh` 或手动执行标准验证命令。
|
||||||
5. 如果基线已坏,先修基线,不在坏的起点上叠新功能。
|
5. 如果基线已坏,先修基线,不在坏的起点上叠新功能。
|
||||||
6. 基线绿了,再从 [`06-tasks.md`](06-tasks.md) 领取唯一任务。
|
6. 基线绿了,再从 [`06-tasks.md`](06-tasks.md) 领取唯一任务。
|
||||||
|
|
||||||
@@ -39,13 +39,10 @@ MVP 功能范围以 [`02-requirements.md`](02-requirements.md) 为唯一权威
|
|||||||
|
|
||||||
## 验证命令
|
## 验证命令
|
||||||
|
|
||||||
生产代码尚未初始化。完成 `T-001` 后,将以下目标命令替换为真实可运行命令:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 -m venv .venv
|
.venv/bin/python3.12 manage.py check
|
||||||
.venv/bin/pip install -r requirements.txt
|
.venv/bin/python3.12 manage.py test
|
||||||
.venv/bin/python manage.py migrate
|
.venv/bin/python3.12 manage.py runserver
|
||||||
.venv/bin/python manage.py runserver
|
|
||||||
```
|
```
|
||||||
|
|
||||||
`T-001` 完成后,必须同步更新 `init.sh`(`init.ps1` 可选)、`03-tech-stack.md`、`05-coding-rules.md` 和 `current-state.md`。
|
`init.sh` 为标准启动与验证入口。
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
- 数据:已创建 superuser `admin`;尚未建立 seed 数据
|
- 数据:已创建 superuser `admin`;尚未建立 seed 数据
|
||||||
- 标准启动路径:`init.sh` 已配置 `pip install` / `manage.py check` / `manage.py runserver` 命令
|
- 标准启动路径:`init.sh` 已配置 `pip install` / `manage.py check` / `manage.py runserver` 命令
|
||||||
- 标准验证路径:`.venv/bin/python manage.py check` 通过(3 个 treebeard 兼容警告非阻塞)
|
- 标准验证路径:`.venv/bin/python manage.py check` 通过(3 个 treebeard 兼容警告非阻塞)
|
||||||
- 当前 blocker:无;下一步执行 `T-002`
|
- 当前 blocker:无;下一步执行 `T-101`
|
||||||
|
|
||||||
## 当前目录要点
|
## 当前目录要点
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
| `business/` | 已有 | 商业计划、内容策略、变现、竞品分析。 |
|
| `business/` | 已有 | 商业计划、内容策略、变现、竞品分析。 |
|
||||||
| `deploy/` | 已有,不入库 | 本机部署凭证(SSH 私钥等),被 `.gitignore` 整目录忽略。 |
|
| `deploy/` | 已有,不入库 | 本机部署凭证(SSH 私钥等),被 `.gitignore` 整目录忽略。 |
|
||||||
| `.gitignore` / `.gitattributes` | 已有 | 忽略凭证与运行产物;统一 LF 行尾。 |
|
| `.gitignore` / `.gitattributes` | 已有 | 忽略凭证与运行产物;统一 LF 行尾。 |
|
||||||
| `init.ps1` / `init.sh` | 已有,占位 | T-001 初始化生产代码后替换真实命令。 |
|
| `init.ps1` / `init.sh` | 已有 | 已配置真实命令,使用 `python3.12`/`pip3.12` 跨平台兼容。 |
|
||||||
| `manage.py` | 已有 | Wagtail/Django 入口。 |
|
| `manage.py` | 已有 | Wagtail/Django 入口。 |
|
||||||
| `requirements.txt` | 已有 | Python 依赖,全部 pin 精确版本。 |
|
| `requirements.txt` | 已有 | Python 依赖,全部 pin 精确版本。 |
|
||||||
| `skelet/` | 已有 | Django 配置包(`wagtail start` 生成 base/dev/production settings)。 |
|
| `skelet/` | 已有 | Django 配置包(`wagtail start` 生成 base/dev/production settings)。 |
|
||||||
|
|||||||
@@ -0,0 +1,189 @@
|
|||||||
|
# Phase 0 评审
|
||||||
|
|
||||||
|
> 评审日期:2026-07-06
|
||||||
|
> 评审视角:全栈开发工程师
|
||||||
|
> 评审范围:T-000 至 T-003 的文档、项目骨架、环境配置、启动脚本和验证基线。
|
||||||
|
|
||||||
|
## 结论
|
||||||
|
|
||||||
|
Phase 0 尚未完全达标。
|
||||||
|
|
||||||
|
Wagtail / Django 项目骨架、Python 3.12 venv、SQLite 数据库、依赖 pin、基础测试和 `manage.py check` / `manage.py test` 基线基本可用。但标准入口 `init.sh` 在仓库规定的 bash / WSL 环境下失败,这是阻断项。
|
||||||
|
|
||||||
|
在继续 Phase 1 前,建议先修复:
|
||||||
|
|
||||||
|
1. `init.sh` / venv 与标准 bash 环境不匹配。
|
||||||
|
2. production settings 缺少强制 `SECRET_KEY`。
|
||||||
|
3. 当前状态文档存在过期和自相矛盾内容。
|
||||||
|
|
||||||
|
## 主要问题
|
||||||
|
|
||||||
|
### 1. High:标准启动入口 `init.sh` 在 bash 下不可用
|
||||||
|
|
||||||
|
仓库规则规定标准环境是 WSL2 / Linux + bash,且 `init.sh` 是标准启动与验证入口:
|
||||||
|
|
||||||
|
- `AGENTS.md`:标准开发环境是 WSL2 / Linux。
|
||||||
|
- `AGENTS.md`:`init.sh` 是标准启动与验证入口。
|
||||||
|
|
||||||
|
但当前 `init.sh` 调用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/pip install -r requirements.txt
|
||||||
|
.venv/bin/python manage.py check
|
||||||
|
```
|
||||||
|
|
||||||
|
实际 `.venv/bin/` 下只有 Windows / MSYS2 风格可执行文件:
|
||||||
|
|
||||||
|
```text
|
||||||
|
pip.exe
|
||||||
|
python.exe
|
||||||
|
python3.12.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
没有:
|
||||||
|
|
||||||
|
```text
|
||||||
|
.venv/bin/pip
|
||||||
|
.venv/bin/python
|
||||||
|
```
|
||||||
|
|
||||||
|
验证命令:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash -lc './init.sh'
|
||||||
|
```
|
||||||
|
|
||||||
|
结果:
|
||||||
|
|
||||||
|
```text
|
||||||
|
./init.sh: line 20: .venv/bin/pip: No such file or directory
|
||||||
|
```
|
||||||
|
|
||||||
|
这会导致每轮开工流程中的“运行标准验证”失败,因此 T-001 / T-003 的标准入口验收不能算通过。
|
||||||
|
|
||||||
|
建议修复:
|
||||||
|
|
||||||
|
- 优先按 WSL / Linux 重新创建 `.venv`,确保 `.venv/bin/python` 和 `.venv/bin/pip` 存在。
|
||||||
|
- 或者正式修改项目开发环境决策为 MSYS2,但这会偏离当前仓库文档,不建议。
|
||||||
|
|
||||||
|
### 2. High:production settings 会回退到开发 `SECRET_KEY`
|
||||||
|
|
||||||
|
当前 `skelet/settings/base.py` 中:
|
||||||
|
|
||||||
|
```python
|
||||||
|
SECRET_KEY = os.environ.get("SECRET_KEY", "django-insecure-dev-key-change-me")
|
||||||
|
```
|
||||||
|
|
||||||
|
`skelet/settings/production.py` 没有覆盖或强制校验 `SECRET_KEY`。
|
||||||
|
|
||||||
|
验证命令:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
DJANGO_SETTINGS_MODULE=skelet.settings.production .venv/bin/python manage.py check --deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
结果包含:
|
||||||
|
|
||||||
|
```text
|
||||||
|
security.W009: Your SECRET_KEY has less than 50 characters, less than 5 unique characters, or it's prefixed with 'django-insecure-'
|
||||||
|
```
|
||||||
|
|
||||||
|
进一步读取 settings,生产配置实际值仍为:
|
||||||
|
|
||||||
|
```text
|
||||||
|
DEBUG False
|
||||||
|
SECRET_KEY django-insecure-dev-key-change-me
|
||||||
|
ALLOWED_HOSTS ['']
|
||||||
|
```
|
||||||
|
|
||||||
|
这不是 Phase 0 本地开发的直接阻断项,但它是上线前安全风险。既然 T-002 已经涉及基础配置与环境样例,应尽早改成 production 缺少 `SECRET_KEY` 时 fail fast。
|
||||||
|
|
||||||
|
建议修复:
|
||||||
|
|
||||||
|
- 在 `production.py` 中强制读取 `SECRET_KEY`。
|
||||||
|
- 缺少或仍为开发默认值时抛出 `ImproperlyConfigured`。
|
||||||
|
- 同时清理 `ALLOWED_HOSTS=['']` 的空字符串问题。
|
||||||
|
|
||||||
|
### 3. Medium:当前状态文档存在过期和自相矛盾内容
|
||||||
|
|
||||||
|
`AGENTS.md` 仍写:
|
||||||
|
|
||||||
|
```text
|
||||||
|
当前仓库处于 harness 文档初始化阶段,生产代码尚未初始化。
|
||||||
|
下一步 ... T-001
|
||||||
|
```
|
||||||
|
|
||||||
|
但任务看板中 Phase 0 已标为 DONE,实际代码也已初始化。
|
||||||
|
|
||||||
|
`docs/current-state.md` 中也存在矛盾:
|
||||||
|
|
||||||
|
```text
|
||||||
|
当前 blocker:无;下一步执行 T-002
|
||||||
|
```
|
||||||
|
|
||||||
|
同一文件后文又写:
|
||||||
|
|
||||||
|
```text
|
||||||
|
已完成:T-000、T-001、T-002、T-003
|
||||||
|
下一个可领取任务:T-101
|
||||||
|
```
|
||||||
|
|
||||||
|
这会误导后续 agent 的任务领取流程。
|
||||||
|
|
||||||
|
建议修复:
|
||||||
|
|
||||||
|
- 更新 `AGENTS.md` 当前阶段和下一步任务。
|
||||||
|
- 更新 `docs/current-state.md` 当前 blocker / 下一步,使其与 `docs/06-tasks.md` 一致。
|
||||||
|
|
||||||
|
### 4. Low:`.env.example` 说明容易误导
|
||||||
|
|
||||||
|
`.env.example` 写:
|
||||||
|
|
||||||
|
```text
|
||||||
|
复制为 .env 并填入真实值
|
||||||
|
```
|
||||||
|
|
||||||
|
但当前项目没有加载 `.env` 的代码,也没有 `python-dotenv` 依赖。用户只复制 `.env` 并不会自动影响 Django settings。
|
||||||
|
|
||||||
|
建议二选一:
|
||||||
|
|
||||||
|
- 接入 dotenv,并明确加载路径。
|
||||||
|
- 或者修改说明,写明这些变量需要通过 shell / systemd / hosting environment 注入。
|
||||||
|
|
||||||
|
## 已通过项
|
||||||
|
|
||||||
|
以下内容经检查或命令验证通过:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.venv/bin/python --version
|
||||||
|
# Python 3.12.12
|
||||||
|
|
||||||
|
.venv/bin/python manage.py check
|
||||||
|
# 0 errors,3 个 treebeard 兼容 warning
|
||||||
|
|
||||||
|
.venv/bin/python manage.py test
|
||||||
|
# 5 tests passed
|
||||||
|
```
|
||||||
|
|
||||||
|
其他通过项:
|
||||||
|
|
||||||
|
- Wagtail / Django 项目骨架已生成。
|
||||||
|
- `manage.py`、`skelet/`、`home/`、`search/`、`core/` 已存在。
|
||||||
|
- SQLite 数据库已 migrate。
|
||||||
|
- `requirements.txt` 已精确 pin 依赖版本。
|
||||||
|
- `home/tests.py` 有 smoke test,访问 `/` 返回 200。
|
||||||
|
- `.gitignore` 已忽略 `.venv/`、`db.sqlite3`、`media/`、`.env`、`deploy/` 和 `*.pem`。
|
||||||
|
- 当前 git 工作区干净。
|
||||||
|
|
||||||
|
## 是否允许进入 Phase 1
|
||||||
|
|
||||||
|
不建议直接进入 Phase 1。
|
||||||
|
|
||||||
|
最低修复门槛:
|
||||||
|
|
||||||
|
1. 修复 `init.sh`,确保在标准 bash / WSL 环境下可运行。
|
||||||
|
2. 修复 production `SECRET_KEY` 默认值风险。
|
||||||
|
3. 同步 `AGENTS.md` 和 `docs/current-state.md`,确保下一步任务明确为 T-101。
|
||||||
|
|
||||||
|
完成以上三项后,Phase 0 可以视为达标,再进入 T-101。
|
||||||
|
|
||||||
@@ -8,9 +8,14 @@
|
|||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
Set-Location -Path $PSScriptRoot
|
Set-Location -Path $PSScriptRoot
|
||||||
|
|
||||||
$InstallCmd = ".venv/bin/pip install -r requirements.txt"
|
$InstallCmd = ".venv/bin/pip3.12 install -r requirements.txt"
|
||||||
$VerifyCmd = ".venv/bin/python manage.py check"
|
$VerifyCmd = ".venv/bin/python3.12 manage.py check"
|
||||||
$StartCmd = ".venv/bin/python manage.py runserver"
|
$StartCmd = ".venv/bin/python3.12 manage.py runserver"
|
||||||
|
|
||||||
|
if (-not (Test-Path ".venv/bin/python3.12") -and -not (Test-Path ".venv/bin/python3.12.exe")) {
|
||||||
|
Write-Error "venv 不存在或损坏,请先运行: python3.12 -m venv .venv"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "==> 当前目录: $($PWD.Path)"
|
Write-Host "==> 当前目录: $($PWD.Path)"
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,20 @@ set -euo pipefail
|
|||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
INSTALL_CMD=(.venv/bin/pip install -r requirements.txt)
|
PYTHON=".venv/bin/python3.12"
|
||||||
VERIFY_CMD=(.venv/bin/python manage.py check)
|
PIP=".venv/bin/pip3.12"
|
||||||
START_CMD=(.venv/bin/python manage.py runserver)
|
|
||||||
|
INSTALL_CMD=("$PIP" install -r requirements.txt)
|
||||||
|
VERIFY_CMD=("$PYTHON" manage.py check)
|
||||||
|
START_CMD=("$PYTHON" manage.py runserver)
|
||||||
|
|
||||||
echo "==> 当前目录: $PWD"
|
echo "==> 当前目录: $PWD"
|
||||||
|
|
||||||
|
if [[ ! -f "$PYTHON" && ! -f "$PYTHON.exe" ]]; then
|
||||||
|
echo "ERROR: venv 不存在或损坏,请先运行: python3.12 -m venv .venv"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "==> 同步依赖"
|
echo "==> 同步依赖"
|
||||||
"${INSTALL_CMD[@]}"
|
"${INSTALL_CMD[@]}"
|
||||||
|
|
||||||
|
|||||||
+18
@@ -154,3 +154,21 @@
|
|||||||
- 决策:`init.sh` 的 `VERIFY_CMD` 已在上轮设为 `manage.py check`,无需修改。
|
- 决策:`init.sh` 的 `VERIFY_CMD` 已在上轮设为 `manage.py check`,无需修改。
|
||||||
- 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。
|
- 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。
|
||||||
|
|
||||||
|
## 2026-07-06 Phase 0 评审修复
|
||||||
|
|
||||||
|
- 状态:DONE
|
||||||
|
- 变更(按 `docs/review/phase0-review.md` 评审逐项修复):
|
||||||
|
- **Issue 1 (High)**:`init.sh` / `init.ps1` 改用 `python3.12`/`pip3.12` 替代 `python`/`pip`,解决 MSYS2 venv 中 `.venv/bin/python` 不存在的问题;增加 venv 存在性检查
|
||||||
|
- **Issue 2 (High)**:`production.py` 新增 `ImproperlyConfigured` 检查,`SECRET_KEY` 缺失或仍为 `django-insecure-` 前缀时启动即失败;修复 `ALLOWED_HOSTS=['']` 空字符串问题(过滤空值)
|
||||||
|
- **Issue 3 (Medium)**:`AGENTS.md` 更新当前阶段(Phase 0 已完成,下一步 T-101)和验证命令;`current-state.md` 修复 blocker 行(T-002→T-101)和 init 脚本状态;`00-ai-start-here.md` 替换为真实验证命令
|
||||||
|
- **Issue 4 (Low)**:`.env.example` 重写说明,明确列出四种环境变量注入方式(shell export、systemd、托管平台、Docker),不再误导用户以为复制即生效
|
||||||
|
- 验证:
|
||||||
|
- `manage.py check`:0 errors(dev settings)
|
||||||
|
- `manage.py test`:5 tests passed
|
||||||
|
- `DJANGO_SETTINGS_MODULE=skelet.settings.production manage.py check`:正确抛出 `ImproperlyConfigured`(SECRET_KEY 缺失)
|
||||||
|
- `SECRET_KEY=<valid> ALLOWED_HOSTS=example.com DJANGO_SETTINGS_MODULE=skelet.settings.production manage.py check`:0 errors(production settings 含正确 SECRET_KEY)
|
||||||
|
- `.env.example` grep:仅占位值,无真实密钥
|
||||||
|
- 阻塞:无。
|
||||||
|
- 决策:因 WSL2 不可用,当前实际开发环境为 MSYS2/MinGW;venv 使用 `--system-site-packages` 复用 MSYS2 Pillow;`init.sh` 使用 `python3.12`/`pip3.12` 实现跨平台兼容。
|
||||||
|
- 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,27 @@
|
|||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
from .base import *
|
from .base import *
|
||||||
|
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
|
|
||||||
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "").split(",")
|
_SECRET_KEY = os.environ.get("SECRET_KEY", "")
|
||||||
|
if not _SECRET_KEY or _SECRET_KEY.startswith("django-insecure-"):
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"SECRET_KEY 环境变量缺失或仍为开发默认值。"
|
||||||
|
"请设置一个安全的 SECRET_KEY(≥50 字符,不包含 'django-insecure-' 前缀)。"
|
||||||
|
)
|
||||||
|
|
||||||
STORAGES["staticfiles"]["BACKEND"] = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
|
ALLOWED_HOSTS = [
|
||||||
|
host.strip()
|
||||||
|
for host in os.environ.get("ALLOWED_HOSTS", "").split(",")
|
||||||
|
if host.strip()
|
||||||
|
]
|
||||||
|
|
||||||
CSRF_COOKIE_SECURE = True
|
CSRF_COOKIE_SECURE = True
|
||||||
SESSION_COOKIE_SECURE = True
|
SESSION_COOKIE_SECURE = True
|
||||||
|
|
||||||
|
STORAGES["staticfiles"]["BACKEND"] = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .local import *
|
from .local import *
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|||||||
Reference in New Issue
Block a user